大家都知道java的AOP很强大,也很实用,但是C#这方面就比较弱一些,而且C#要实现AOP编程,业务类必须集成一个ContextBoundObject类,有点入侵式编程,
C#编写AOP的原理也比表简单,这里我封装了一个类库:MoonAOP
MoonAOP的用法比较简单,首先在自己的项目中引用MoonAOP.dll,然后实现IMoonInterceptorInvoke,比如:
/// <summary>
/// 方法拦截前被调用
/// </summary>
class BeforeHandleImpl : IMoonInterceptorInvoke
{
public void ExecuteMethod(IMoonMethodCallMessage moonMethodCallMessage)
{
Console.WriteLine("执行前");
}
}
/// <summary>
/// 方法执行后被调用
/// </summary>
class AfterHandleImpl : IMoonInterceptorInvoke
{
public void ExecuteMethod(IMoonMethodCallMessage moonMethodCallMessage)
{
Console.WriteLine("执行后");
}
}
然后在业务类中这样标明:
[MoonInterceptor("切面测试")]
class MyBLL : MoonContext
{
[MoonInterceptorMethodAfter(new Type[] { typeof(AfterHandleImpl) })]
[MoonInterceptorMethodBefore(new Type[] { typeof(BeforeHandleImpl) })]
public void Test(string msg)
{
Console.WriteLine(msg);
}
}
业务类需要继承MoonContext(上下文对象),然后外部调用Test的时候,在Test被调用前,首先会执行BeforeHandleImpl这个类的ExecuteMethod方法,在
Test执行完成之后,会调用AfterHandleImpl类的ExecuteMethod方法。
这样我们就可以尽情的把记录日志,或者事物控制的代码在AOP里面去写,就不用在每个业务类中都写一遍。还包括异常捕获这些,自动处理。
源代码已经上传:
http://download.csdn.net/download/lengyue2015/9977720