代理工厂
定义了拦截器后,你所要注入的对象不能使用 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 方法来创建代理类型。