概念

  • 拦截器又分两种:接口拦截器、类拦截器,我们常用的是接口拦截器,当我们的服务的类型是接口的时候我们就需要使用这种方式。如果我们没有基于接口设计我们的类,而是直接实现类的话我能就需要类拦截器。类拦截器就需要我们把方法设计为虚方法,这样子允许继承类重载的情况下才可以拦截我们的具体方法
  • 接口拦截器: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()开启允许接口拦截器