zoukankan      html  css  js  c++  java
  • asp.net core 3.1 应用Aufac 进行AOP 的三种方式1 基于接口AOP

    Autofac 官方地址:https://autofaccn.readthedocs.io/en/latest/advanced/interceptors.html

    (1)引用 nuget :Autofac.Extensions.DependencyInjection  Autofac.Extras.DynamicProxy

    (2)修改入口文件

    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    //改用Autofac来实现依赖注入
                    .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                        
                    });

    (3)修改startup 文件

         //autofac 新增
            public ILifetimeScope AutofacContainer { get; private set; }
      public void ConfigureContainer(ContainerBuilder builder)
            {
    }

    (4)创建AOP拦截文件

    using Castle.DynamicProxy;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace WebApplication1.Aufac
    {
        public class CacheIntercept : IInterceptor
        {
            public CacheIntercept()
            { }
            public void Intercept(IInvocation invocation)
            {
                var method = invocation.MethodInvocationTarget ?? invocation.Method;
                Debug.WriteLine("before");
                invocation.Proceed();
                Debug.WriteLine("end");
            }
        }
    }

    (4)应用拦截效果

          4-1 使用接口进行AOP拦截

           4.1.1 创建接口文件,并实现接口

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace WebApplication1.Aufac
    {
        public interface IAufacInterFace3
        {
            string GetName();
    
        }
        public class AufacInterFace3: IAufacInterFace3
        {
            /// <summary>
            /// 基于接口的AOP
            /// </summary>
            /// <returns></returns>
            public   string GetName()
            {
                Debug.WriteLine("this is getname");
                return "this is getname";
            }
        }
    }

    4.1.2配置startup 注入到服务

           public void ConfigureContainer(ContainerBuilder builder)
            {
    
                //基于接口的AOP
                builder.RegisterType<WebApplication1.Aufac.CacheIntercept>();
                builder.RegisterType<WebApplication1.Aufac.AufacInterFace3>().As<WebApplication1.Aufac.IAufacInterFace3>()
                  .AsImplementedInterfaces()
                 .InterceptedBy(typeof(WebApplication1.Aufac.CacheIntercept))
                 .EnableInterfaceInterceptors();
    }

    4.1.3在代码里调用

    AufacInterFace3 发现已经进行了拦截处理
    调用代码如下
      WebApplication1.Aufac.IAufacInterFace3 face3;
    
            public WeatherForecastController(WebApplication1.Aufac.IAufacInterFace3 interFace3
                )
            {
                face3 = interFace3;
            }
            [HttpGet]
            //[Caching(AbsoluteExpiration =2,keyname ="id",keyvaluename ="id")]
            public virtual string Get()
            {
                face2.GetName();
                return DateTime.Now.ToString();
            }
  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/qiejinxing/p/14652152.html
Copyright © 2011-2022 走看看