Click here to Skip to main content
15,879,535 members
Articles / Programming Languages / C#

Configurable Aspects for MEF

Rate me:
Please Sign up or sign in to vote.
5.00/5 (5 votes)
6 Sep 2011CPOL9 min read 39.5K   285   18  
Add AOP capabilities to MEF by configuration using Dynamic Decorator.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Reflection;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Proxies;
using System.Runtime.Remoting.Messaging;

using NCT;
using System.Security.Principal;
using System.Threading;
using System.Diagnostics;
using DynamicDecoratorAOP.Concerns;

namespace SharedLib
{
    public class SysConcerns
    {
        static SysConcerns()
        {
            ConcernsContainer.runtimeAspects.Add("SharedLib.SysConcerns.EnterLog", new Decoration(SysConcerns.EnterLog, null));
            ConcernsContainer.runtimeAspects.Add("SharedLib.SysConcerns.ExitLog", new Decoration(SysConcerns.ExitLog, null));
        }

        public static void EnterLog(AspectContext ctx, object[] parameters)
        {
            StackTrace st = new StackTrace(new StackFrame(4, true));
            Console.Write(st.ToString());
            
            IMethodCallMessage method = ctx.CallCtx;
            string str = "Entering " + ctx.Target.GetType().ToString() + "." + method.MethodName +
                "(";
            int i = 0;
            foreach (object o in method.Args)
            {
                if (i > 0)
                    str = str + ", ";
                str = str + o.ToString();
            }
            str = str + ")";

            Console.WriteLine(str);
            Console.Out.Flush();

        }

        public static void ExitLog(AspectContext ctx, object[] parameters)
        {
            IMethodCallMessage method = ctx.CallCtx;
            string str = "Exiting " + ctx.Target.GetType().ToString() + "." + method.MethodName +
                "(";
            int i = 0;
            foreach (object o in method.Args)
            {
                if (i > 0)
                    str = str + ", ";
                str = str + o.ToString();
            }
            str = str + ")";

            Console.WriteLine(str);
            Console.Out.Flush();
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
Object-oriented (OO) is about "classes" not "objects". But I truly believe that "objects" deserve more our attentions. If you agree, read more on... Dynamic Object Programming (DOP), Component-Based Object Extender (CBO Extender), AOP Container and Dynamic Decorator Pattern.

Mobile development is not just another type of front end. The real challenge is actually in the back end: How to present meaningful information in time to mobile users with exponentially increased data flooding around? Here is my first mobile solution: SmartBars - Barcode Reader, Price Comparison and Coupons.

Gary lives in southeast Michigan. My first programming language is FORTRAN. For the last a few years, I have primarily focused on .NET technologies with Mobile Development as my newest interest.

Comments and Discussions