我们可以使用AOP在我们执行代理类的Eat方法之前去调用我们的具体实现Cat的Eat方法,我们修改一下拦截器。
public class CatInterceptor:IInterceptor { private readonly ICat _cat; /// <summary> /// 通过依赖注入 注入ICat的具体实现 /// </summary> /// <param></param> public CatInterceptor(ICat cat) { _cat = cat; } public void Intercept(IInvocation invocation) { Console.WriteLine("喂猫吃东西"); invocation.Method.Invoke(_cat, invocation.Arguments);//调用Cat的指定方法 } }我们看一下运行效果:
可以看见我们从一个什么都没有的CatOwner类,来为其调用了一个具体的猫吃东西的行为,是不是感觉很神奇!
有人可能会说,一个铲屎官为什么要去实现一个ICat接口。我想说纯属胡编乱造,只是想阐明这个用法,这个意思。
应用场景用过ABP框架的人都应该知道其有个技术名为DynamicWebapi,非常方便可以动态帮我们的应用逻辑层生成webapi,而不需要我们手动去编写webapi来发布。这里据用到了上面所说的技术,动态生成Wabpi Controller,然后为其添加应用逻辑接口,在调用具体的应用逻辑方法时(Action)通过AOP拦截调用具体应用逻辑实现来完成。