一个简单的AOP框架

来源:互联网 发布:手机全能恢复软件 编辑:程序博客网 时间:2024/06/01 23:49

  AOP它可以帮助我们解决很多代码横向的很多问题,如果你不了解AOP.请参看相关的文章.
  现在介绍的一个AOP框架,来自CodeProject 作者Andrea Bioli.文章名称The simplest AOP scenario in C#
  现在我们来使用这个框架来演示一个AOP的强大.
  首先创建一个类,名位SimpleAOP.这个类必须继承AOPBaseClass.表示这个类要使用一个控制器来控制.代码如下
   class SimpleAop:AOPBaseClass
    {
        public void Output(string s)
        {
            Console.WriteLine(s);
        }
        public void Test1()
        {
            Output("Test1");
        }
        Public void Test2()
        {
   Output(“Test2”);
        }
  Public void NoMatcherMethod()
  {
   Output(“NoMatcherMethod”);
  }
}
前面提到了控制器.现在我们来创建自己的控制器类,这个类必须继承AOPBaseControler(这里著名,这里我改良过的)
   public class MyController : AOPBaseController
    {
        public void Output(string s)
        {
            Console.WriteLine(s);
        }
        public override void Begin(object o, System.Runtime.Remoting.Messaging.IMessage msg)
        {
            Output("begin");
        }
        public override void End(object o, System.Runtime.Remoting.Messaging.IMessage msg)
        {
            Output("end");
        }
        public override void Exception(object o, System.Runtime.Remoting.Messaging.IMessage msg)
        {
            Output("Exception");
        }
    }
这里覆盖了三个方法Begin,End和Exception表示在使用AOP的类的方法中我们可以添加这三个方法.
我们现在来看入口函数
AOPConfig.SetAssoc(typeof(SimpleAop), typeof(MyController), new RegExMethNameMatcher("Test"));
 SimpleAop aop = new SimpleAop();
 aop.Test1();
这里的第一行表示在SimpleAOP类和MyController之间的联合,那么通过什么来联合这两个类呢?RegExMethNameMatcher这个类可以用来查找SimpleAOP里面的方法那些可以使用MyController提供的方法.
上面的例子表明了,我们的Controller运用到了匹配Test的方法上.
代码的输出结果为
Begin
Test1
End
我们在SimpleAOP类Test1方法上添加一个throw new Exception(“TestException
“);来抛出一个异常.在运行刚才的代码.输出结果为
Begin
Test1
End
Exeption
这个说明了,当抛出异常的时候,调用控制器的Exception方法.

好了,我们回到入口函数.我们添加如下的代码
Aop.Test2();/
我们可以看到输出Test2()也运用了控制器.
如果添加
Aop. NoMatcherMethod();就可以看出来,这个函数因为和Matcher不匹配,所以没有运用控制器.
体会到AOP所带来的另外一种代码复用.

框架获得请查看CodeProject

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mlssun/archive/2006/03/05/616168.aspx

原创粉丝点击