• AutoFac实现AOP扩展


    1.nuget包

    2.用autoFuc替代原来的IOC容器。

    program类中修改代码

    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });

    添加动态代理类

    public class CustomAutofacCacheInterceptor : IInterceptor
        {
            private IDistributedCache _iDistributeCache;
    
            public CustomAutofacCacheInterceptor(IDistributedCache distributeCache) {
                this._iDistributeCache = distributeCache;
            }
    
            public void Intercept(IInvocation invocation)
            {
                string key = $"{invocation.Method}_{string.Join(",", invocation.Arguments)}";
                string result = this._iDistributeCache.GetString(key);
                if (string.IsNullOrEmpty(result)) {
                    invocation.Proceed();  //实际执行的方法
                    this._iDistributeCache.SetString(key,Convert.ToString(invocation.ReturnValue)  //设置缓存,
                        , new DistributedCacheEntryOptions()
                        {
                            AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20)
                        });
                }
                else {
                    invocation.ReturnValue = Convert.ChangeType(result, invocation.Method.ReturnType); //取缓存
                }
            }
        }

    startup类中修改代码

    public void ConfigureContainer(ContainerBuilder containerBuilder) 
            {
                containerBuilder.RegisterType<UserService>().As<IUserService>().EnableInterfaceInterceptors()
                    .InterceptedBy(typeof(CustomAutofacCacheInterceptor));
    
                containerBuilder.RegisterType<CustomAutofacCacheInterceptor>();
            }

    当执行UserService类中的方法时,会走代理类。实际执行的方法为invocation.Proceed();

  • 相关阅读:
    JVM系列一:虚拟机内存区域
    【转载】 mybatis入门系列四之动态SQL
    mybatis入门系列三之类型转换器
    mybatis入门系列二之输入与输出参数
    mybatis入门系列一之创建mybatis程序
    SpringBoot基础系列一
    如何阅读W3C标准.md
    wget下载豆瓣图片失败
    js中调用worker工程化结构
    linux下fastboot工具使用异常
  • 原文地址:https://www.cnblogs.com/kingsmart/p/16126885.html
Copyright © 2020-2023  润新知