• asp.net core 基于autofac 实现AOP 拦截 之 第二种方式 -基于class


    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 Autofac.Extras.DynamicProxy;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace WebApplication1.Aufac
    {
        /// <summary>
        /// 类的AOP方式1
        /// </summary>
        [Intercept("datacache")]
        public class AufacClass1
        {
            /// <summary>
            /// 必须是virtual
            /// </summary>
            /// <returns></returns>
            public virtual string GetName()
            {
                Debug.WriteLine("this is getname");
                return "this is getname";
            }
        }
    }

    4.1.2配置startup 注入到服务

            //autofac 新增
            public void ConfigureContainer(ContainerBuilder builder)
            {
               builder.RegisterType<WebApplication1.Aufac.AufacClass1>().EnableClassInterceptors();
                builder.Register(c => new WebApplication1.Aufac.CacheIntercept()).Named<IInterceptor>("datacache");
    
    }

    4.1.3在代码里调用 发现已经进行了拦截处理

    调用代码如下

    WebApplication1.Aufac.AufacClass1 face1;
    public WeatherForecastController(WebApplication1.Aufac.AufacClass1 interFace1
    )
    {
    face1 = interFace1;
    }
    [HttpGet]
    //[Caching(AbsoluteExpiration =2,keyname ="id",keyvaluename ="id")]
    public  string Get()
    {
    face1.GetName();
    return DateTime.Now.ToString();
    }

  • 相关阅读:
    faster rcnn流程
    本质矩阵E求解及运动状态恢复
    对极几何
    仿射变换与投影变换
    SVD分解及线性最小二乘问题
    常见的网络结构
    Docker swarm 获取service的container信息
    XNginx升级记录
    sparql 查询语句快速入门
    开源音乐下载神器XMusicDownloader更新,支持歌单一键下载,支持无损音乐
  • 原文地址:https://www.cnblogs.com/qiejinxing/p/14652185.html
Copyright © 2020-2023  润新知