AOP框架Dora.Interception 3.0 [5]: 基于策略的拦截器注册方式

注册拦截器旨在解决如何将拦截器应用到目标方法的问题。在我看来,针对拦截器的注册应该是明确而精准的,也就是我们提供的注册方式应该让拦截器准确地应用到期望的目标方法上,不能多也不能少。如果注册的方式过于模糊,很容易将拦截器应用到非目标方法上。按照这个原则,一些AOP框架提供的针对类型命名空间、类型或者成员名称前(后)缀的拦截器映射策略其实都是不严谨的。Dora.Interception只提供两种严谨的拦截器注册方式,一种前面介绍的针对特性标注的方式,另一种就是本篇介绍的针对策略的方式。

一、AddPolicy

拦截策略表达的是:将一个提供拦截器的IInterceptorProvider对象应用到某个目标类型的某一个或者多个方法或者属性成员上。如下所示的是在《编程体验》中定义的拦截策略,它表达的意图是:将CacheReturnValueAttribute应用到SystemClock类型的GetCurrentTime方法上,并且将Order属性设置为1。

public class Program { public static void Main(string[] args) { Host.CreateDefaultBuilder() .UseInterceptableServiceProvider(configure: Configure) .ConfigureWebHostDefaults(buider => buider.UseStartup<Startup>()) .Build() .Run(); static void Configure(InterceptionBuilder interceptionBuilder) { interceptionBuilder.AddPolicy(policyBuilder => policyBuilder .For<CacheReturnValueAttribute>(order: 1, cache => cache .To<SystemClock>(target => target .IncludeMethod(clock => clock.GetCurrentTime(default))))); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjszs.html