Autofac 设置方法拦截器的两种方式

Posted 六欲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autofac 设置方法拦截器的两种方式相关的知识,希望对你有一定的参考价值。

前提

1.Nuget安装Autofac 4.0以下版本  4.0及4.0 以上版本暂时没找到合适的方案

2.Nuget安装Autofac.Extras.DynamicProxy2

3.创建一个类似下面代码得 拦截类

    public class TestInterceptor : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            string c = string.Format("Calling method {0} with parameters {1}... ",
     invocation.Method.Name,
     string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray()));

            invocation.Proceed();

            string b = string.Format("Done: result was {0}.", invocation.ReturnValue);
        }
    }

注:autufac文档

http://docs.autofac.org/en/latest/advanced/interceptors.html

第一种方式

在接口或者实现类添加[Intercept(typeof(TestInterceptor))]标签

如:

   [Intercept(typeof(TestInterceptor))]
    public interface IPersonRepository
    {
        IEnumerable<Person> GetAll();
        Person Get(int id);
        Person Add(Person item);
        bool Update(Person item);
        bool Delete(int id);
    }

添加注入代码的时候这样写:

builder.RegisterType<PersonRepository>().EnableInterfaceInterceptors().As<IPersonRepository>();

builder.RegisterType<TestInterceptor>();

第二种 

不用添加[Intercept(typeof(TestInterceptor))]标签

添加注入代码的时候这样写:

builder
.RegisterType<PersonRepository>()
.EnableInterfaceInterceptors()
.InterceptedBy(typeof(TestInterceptor))
.As<IPersonRepository>();

好了  结束

 

以上是关于Autofac 设置方法拦截器的两种方式的主要内容,如果未能解决你的问题,请参考以下文章

Spring事务管理的两种方式

mybatis的两种分页方式:RowBounds和PageHelper

Feign调用中的两种Header传参方式

解决springmvc拦截器拦截静态资源的两种方式

学习笔记——SpringMVC拦截器的两种装配方式;SpringMVC拦截器工作原理;SpringMVC中的异常处理器;SpringMVC工作原理

使用mybatis的两种方式