Autofac使用(3)---AOP支持

news2024/10/7 12:29:05

1、Nuget引入程序集

2、扩展IInterceptor

    public class CusotmInterceptor : IInterceptor
    {
        /// <summary>
        /// 切入者逻辑
        /// 
        /// 使用了Intercept 方法把 要调用的Call方法给包裹起来了
        /// </summary>
        /// <param name="invocation"></param>
        public void Intercept(IInvocation invocation)
        {
            {
                Console.WriteLine("Before");
            }
            invocation.Proceed(); //这句话的执行就是要去执行真实的方法
            {
                Console.WriteLine("After");
            }

        }
    }

3、注册对象和具体之间的关系的时候,需要执行要支持AOP扩展EnableClassInterceptors

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());//通过工厂替换,把Autofac整合进来

builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
    containerBuilder.RegisterType<Microphone>().As<IMicrophone>();
    containerBuilder.RegisterType<Power>().As<IPower>();
    containerBuilder.RegisterType<Headphone>().As<IHeadphone>();
    containerBuilder.RegisterType<ApplePhone>().As<IPhone>()
    //.EnableClassInterceptors(); //当前的配置 要支持AOP扩展--通过类来支持
    .EnableInterfaceInterceptors(new ProxyGenerationOptions()
    {
        Selector = new CustomInterceptorSelector()
    });
    containerBuilder.RegisterType<CusotmInterceptor>();
    containerBuilder.RegisterType<CusotmLogInterceptor>();
    containerBuilder.RegisterType<CusotmCacheInterceptor>();


    //注册每个控制器和抽象之间的关系
    var controllerBaseType = typeof(ControllerBase);
    containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly)
        .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
        .PropertiesAutowired(new CusotmPropertySelector()); //支持属性注入

});

   //支持控制器的实例让IOC容器来创建---autofac来创建
   builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());

4.把要扩展aop的方法定义为  virtual 方法

    [Intercept(typeof(CusotmInterceptor))]
    public class ApplePhone : IPhone
    {
        public IMicrophone Microphone { get; set; }
        public IHeadphone Headphone { get; set; }
        public IPower Power { get; set; }

        public ApplePhone(IHeadphone iHeadphone)
        {
            this.Headphone = iHeadphone;
            Console.WriteLine("{0}带参数构造函数", this.GetType().Name);
        }

        public virtual void Call()
        {
            Console.WriteLine("{0}打电话", this.GetType().Name); ;
        }

        public void Text()
        {
            Console.WriteLine("{0}发信息", this.GetType().Name); ;
        }
    }

5.把扩展的IInterceptor 也要注册到容器中去

containerBuilder.RegisterType<CusotmInterceptor>();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/971179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

架构设计基础设施保障IaaS弹性伸缩和无服务器计算

目录 1 高可用弹性伸缩实践2 无服务器计算&#xff08;FaaS&#xff09; 1 高可用弹性伸缩实践 背景 弹性伸缩是云服务架构的重要优势&#xff0c;能够很好的解决高并发场景下的性能瓶颈&#xff0c; 同时节省运营成本。 在 IaaS 端&#xff0c;能够弹性伸缩的最实用的产品形…

AIoT+5G改变智慧城市:揭秘智慧公厕的奇妙魅力

AIoT5G的新型智慧城市应用带来了智慧公厕的全新体验。通过智能监测、高速网络、智能调控、智慧管理等技术应用&#xff0c;公厕的舒适性、便捷性和智慧化程度得到了极大提升。可以看到的是&#xff0c;智慧公厕正逐渐激活智慧城市的生活场景&#xff0c;为城市居民带来更好的生…

无需租用云服务器:使用Linux本地搭建web服务并实现内网穿透发布公网访问的详细教程

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

Mac电脑其他文件占用超过一大半的内存如何清理?

mac的存储空间时不时会提示内存已满&#xff0c;查看内存占用比例最大的居然是「其他文件」&#xff0c;「其他文件」是Mac无法识别的格式文件或应用插件扩展等等...如果你想要给Mac做一次彻底的磁盘空间清理&#xff0c;首当其冲可先对「其他文件」下手&#xff0c;那么我们该…

Mactracker for mac,让您轻松掌握Mac电脑硬件信息的利器

Mactracker for mac是一款运行在MacOS平台上的Mac硬件信息查询工具。它能够方便地显示您电脑所有硬件的信息&#xff0c;包括处理器速度、内存、光盘驱动器、图形卡、支持的macOS版本和扩展选项等。此外&#xff0c;它还提供了有关Apple鼠标、键盘、显示器、打印机、扫描仪、数…

TensorFlow(R与Python系列第四篇)

目录 一、TensorFlow介绍 二、张量 三、有用的TensorFlow运算符 四、reduce系列函数实现约减 1-第一种理解方式&#xff1a;引入轴概念后直观可理 2-第二种理解方式&#xff1a;按张量括号层次的方式 参考&#xff1a; 一、TensorFlow介绍 TensorFlow是一个强大的用于数…

通过HFS低成本搭建NAS,并内网穿透实现公网访问

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 云存储作为一个新概念&#xff0c;在前些年炒的火热&#xff0c;虽然伴随一系列黑天鹅…

打不开github,解决方案

国内加载Githup会很慢&#xff0c;有时候会自己连接超时进不去&#xff0c; 那么如何访问呢&#xff0c;下面就带大家来一起操作 这篇文章借鉴于&#xff08;解决国内 github.com 打不开的最最最准确方法_杨大脸I的博客-CSDN博客&#xff09; 原作者是它&#xff0c;我这里也是…

同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

据报道&#xff0c;苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是&#xff0c;这次更新将同时发布&#xff0c;而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法&#xff0c;苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接…

若伊代码分析(前端 vue2 登录页)

目录 前端项目搭建 项目调整及element引入 登录界面样式 获取验证码 全局变量 vue中利用.env文件存储全局环境变量&#xff0c;以及配置vue启动和打包命令 配置.env文件 获取.env中的全局变量 实际用处 --------项目代码------- 跨域配置 配置代理方式一 配置代理…

更健康舒适更科技的照明体验!书客SKY护眼台灯SUKER L1上手体验

低价又好用的护眼台灯是多数人的需求&#xff0c;很多人只追求功能性护眼台灯&#xff0c;显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到&#xff0c;然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯&#xff0c;拥有高品质光源&#xff…

【2023】CompletableFuture使用代码案例实习使用场景介绍

CompletableFuture 一、介绍1、概述2、常用方法 二、方法使用1、异步操作1.1、创建任务&#xff08;runAsync | supplyAsync&#xff09;runAsyncsupplyAsync 1.2、获取结果&#xff08;get | join&#xff09;1.3、异常处理&#xff08;whenComplete | exceptionally&#xff…

机器学习(吴恩达第一课)

课程链接 文章目录 第一周1、机器学习定义2、监督学习(Supervised learning)1、回归(Regression)2、分类(Classification) 3、无监督学习(Unsupervised learning)4、线性回归模型5、代价函数6、梯度下降(Gradient descent)1、学习率2、用于线性回归的梯度下降 第二周(多维特征…

根据梁山好汉的武力值排交椅:python知识点串联sorted,enumerate,zip,list comprehension

故事发生的背景是这样的&#xff0c;水泊梁山好汉武松&#xff0c;鲁智深&#xff0c;杨志三人在上梁山前&#xff0c;共同落草过二龙山&#xff0c;好汉们需要根据其战斗力的高低来排座次&#xff0c;战斗力最高的坐第一把交椅&#xff0c;其次的坐第二把交椅&#xff0c;以此…

【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session

5.登录功能 通过最基础的登录操作来完成登录处理 登录页面处理 认证服务的处理 /*** 注册的方法* return*/PostMapping("/login")public String login(LoginVo loginVo , RedirectAttributes redirectAttributes){R r memberFeginService.login(loginVo);if(r.getC…

22 元类技术(面向切片编程)|ORM的实现|抽象类与接口类

文章目录 前情知识补充hasattr 函数setattr函数getattr函数join 函数 元类技术使用type创建类什么是元类&#xff08;概念总结&#xff09;\_\_metaclass\_\_属性使用metaclass 的函数方式进行创建类使用metaclass 的类方式进行创建类 自定义元类 元类实现ORM接口类与抽象类抽象…

分治NTT/在线卷积

https://www.luogu.com.cn/problem/P4721 已知 g g g&#xff0c;求 考虑分治&#xff0c;现在在 [ l , r ] [l,r] [l,r]&#xff0c;先计算 [ l , m i d ] [l, mid] [l,mid]&#xff0c;然后计算 [ l , m i d ] [l, mid] [l,mid] 对 [ m i d 1 , r ] [mid1,r] [mid1,r…

Java elasticsearch scroll模板实现

一、scroll说明和使用场景 scroll的使用场景&#xff1a;大数据量的检索和操作 scroll顾名思义&#xff0c;就是游标的意思&#xff0c;核心的应用场景就是遍历 elasticsearch中的数据&#xff1b; 通常我们遍历数据采用的是分页&#xff0c;elastcisearch还支持from size的方…

Redis基础知识(二):事务机制

文章目录 一、什么是事务机制&#xff1f;二、Redis模式下如何实现事务机制&#xff1f;2.1 显式开启一个事务2.2 将命令入队列Queue2.3 执行事务或丢弃2.4 EXEC命令执行示例2.5 DISCARD命令&#xff1a;放弃事务2.6 因为命令错误导致的事务回滚 三、Redis事务机制能实现哪些属…

气象监测——关于气象监测站的介绍

在科技日益发展的今天&#xff0c;人类对自然环境的认识和依赖程度越来越高。气象监测站作为用于收集、分析和传播气象数据的设施&#xff0c;为天气预报、气候变化研究、灾害防治等方面提供数据支持。随着科技的不断进步&#xff0c;气象监测站已经发展成为集多种高科技设备于…