现在通用的做法一般有两种:一个是上下文消息传递,一个是利用代理RealProxy,这里的做法是前面一种。
首先定义一个Attribute。
1
[AttributeUsage(AttributeTargets.Class)]
2
public class LogPointer : ContextAttribute
3
}
然后,把写日志这件事情加入到上下文中。
2
3
1
public class LogHandler : IContextProperty, IContributeObjectSink
2
}
最后,还需要在消息链中处理消息。
2
1
public class LogTrack : IMessageSink
2
}
这样子,一个写日志的AOP实现就完成了。2
我们来测试一下:
1
[LogPointer("Log")]
2
public class Test:ContextBoundObject
3
}
需要注意的是,代码中红色部分是必须的。2
3
到这里,就大功告成了,当然,实际应用中,你可以把这些东西抽象封装一下,让它更具有通用性。
写完了这篇东西,去百度搜索了一下,原来这样子的实现简直太多了,给大家介绍几个:
1)http://www.brucezhang.com/articles/256909.html
这是一个园里的大牛写的,内容很丰富。
2)http://msdn.microsoft.com/msdnmag/issues/02/03/AOP/
这是MSDN2002年的一篇文章。
3)http://www.cs-open.com/sort/1.html
一些开源的AOP框架。
以上,希望对大家有所帮助。