代理工厂


  定义了拦截器后,你所要注入的对象不能使用 new 来实例化了,而是需要使用代理工厂 AspectFactory 类来创建实例。AspectFactory 类会使用 Emit 技术遍列所有 virtual 的方法和属性,将标记的拦截器编译注入到生成的代理类中。你只需要使用 BuildProxy 方法就可以获得一个代理实例。如下所示:

[TestMethod]
public void TestAopInvoke()
{
    var proxy = AspectFactory.BuildProxy<AopTester>();

    proxy.HelloWorld();

    Assert.AreEqual(-1d, proxy.Calculate(100d, 0d));
}

  AopTester 类及拦截器的定义见 拦截器

  AspectFacotry 类的另外一个方法 GetProxyType 用于获取编译的代理类型。你也可以使用 InterceptBuilder 类的 BuildType 方法来创建代理类型。