netcore使用AutoFac實現AOP


第一步,添加程序集引用

在Nuget中搜索autofac找到Autofac.Extras.DynamicProxy並安裝。

 

 

 第二步:添加攔截器

/// <summary>
    /// 攔截器(實現 Castle.DynamicProxy.IInterceptor)接口
    /// </summary>
    public class CustomAutoFacAOPInterception : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            Console.WriteLine("執行之前可以寫日志、參數檢查……");
       //可以捕獲異常 invocation.Proceed(); Console.WriteLine(
"執行之后可以寫日志……"); } } /// <summary> /// person服務接口 /// </summary> public interface IPerson { string Speak(); } /// <summary> /// 接口的實現類 /// 注意,與Unity實現aop不同,autofac是作用於實現類而不是接口 /// </summary> [Intercept(typeof(CustomAutoFacAOPInterception))] public class Person : IPerson { public string Speak() { return "你好,我是一個Person"; } }

第三步,在注冊模塊注冊攔截器並啟用AOP攔截

/// <summary>
    /// AutoFac注冊模塊
    /// </summary>
    public class CustomAutoFacModule: Autofac.Module
    {
       /// <summary>
       /// 重寫父類的Load方法
       /// </summary>
       /// <param name="builder"></param>
        protected override void Load(ContainerBuilder builder)
        {
            //1、注冊攔截器
            builder.Register(a => new CustomAutoFacAOPInterception());
            //2、設置該類型允許AOP攔截
            builder.RegisterType<Person>().As<IPerson>().EnableInterfaceInterceptors().SingleInstance();
            builder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();//感嘆,這語法,真的是不能再爽了
            //后面可以注冊好多類型……
            //后面可以注冊好多類型……
            //后面可以注冊好多類型……
            //后面可以注冊好多類型……
        }
    }

第四步,調用

 public class InterceptDemoController : Controller
    {
        private IPerson _personService = null;
        /// <summary>
        /// 構造注入
        /// </summary>
        /// <param name="person"></param>
        public InterceptDemoController(IPerson person)
        {
            _personService = person;
        }
        public IActionResult Index()
        {
            string rel = _personService.Speak();
            return Content(rel);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM