概念
- 拦截器又分两种:接口拦截器、类拦截器,我们常用的是接口拦截器,当我们的服务的类型是接口的时候我们就需要使用这种方式。如果我们没有基于接口设计我们的类,而是直接实现类的话我能就需要类拦截器。类拦截器就需要我们把方法设计为虚方法,这样子允许继承类重载的情况下才可以拦截我们的具体方法
- 接口拦截器:EnableInterfaceInterceptors()
- 类拦截器:EnableClassInterceptors(),一定要用虚函数:
public virtual void MethodHA(string a)
如何实现的
1.写拦截器:
LogInterceptor : IInterceptor
- invocation.Proceed();是指我们具体方法的执行,如果这一句不执行的话就相当于把我们的切面方法拦截掉。打个比方我们需要做登录验证,则可以把invocation.Proceed()放到if语句里面,如果验证通过则执行,如果不通过则不执行
2.注册拦截器:
builder.RegisterType<LogInterceptor>();
- 把拦截器注册到容器里面去
3.注册被拦截的类并启用类拦截:
builder.RegisterType<Person>().EnableClassInterceptors().InterceptedBy(typeof(LogInterceptor))
- 注册需要添加AOP切面的服务
- InterceptedBy(typeof(MyInterceptor))指开启拦截器,并指定拦截方法为MyInterceptor
- 也可以使用手动拦截器:
[Intercept(typeof(LogInterceptor))]
- 也可以使用手动拦截器:
- EnableInterfaceInterceptors()开启允许接口拦截器