Autofac在WebApi,Winform中应用

安装注意事项

使用AOP的时候需要安装Autofac.Extras.DynamicProxy,如果发现VS老是提示报错,需要把VS重启下才可以识别。

WebApi

注意事项:WebApi中多一个ApiController中构造注入功能。

注入和AOP拦截

 var siteNameList = ClassHelper.GetConstants(typeof(SiteName));//创建容器var builder = new ContainerBuilder();//Api接口注入
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注册api容器的实现var assemblys = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();//builder.RegisterAssemblyTypes(assemblys.ToArray())//查找程序集中以Service结尾的类型
//.Where(t => t.Name.EndsWith("Service"))
//.AsImplementedInterfaces();//拦截器注入builder.RegisterType<AOPInterceptor>();Type baseType = typeof(IDependency);//注册DLL并开启接口拦截,通过拦截器
// 获取所有相关类库的程序集
// 先注册匹配非工厂名开头的Service
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(type => baseType.IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract&& type.Name.EndsWith("Service")&& !siteNameList.Contains(type.Name.Substring(0, 4))).AsImplementedInterfaces().InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//InstancePerLifetimeScope 保证对象生命周期基于请求//后注册匹配工厂名开头的Service
builder.RegisterAssemblyTypes(assemblys.ToArray()).Where(type => baseType.IsAssignableFrom(type) && !type.GetTypeInfo().IsAbstract&& type.Name.EndsWith("Service")&& siteNameList.Contains(type.Name.Substring(0, 4)) && type.Name.Substring(0, 4) == AbstractFactory.siteConfig.SiteName).AsImplementedInterfaces().InstancePerLifetimeScope().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//InstancePerLifetimeScope 保证对象生命周期基于请求Autofac.IContainer container = builder.Build();var configuration = GlobalConfiguration.Configuration;//WebApi整个的解析依赖交给AutoFac     //默认构造函数注入
configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册api容器需要使用HttpConfiguration对象//把所有类型都注册到AutoFac容器里,最后把整个项目的实例创建和解析依赖交给AutoFac,//这样AutoFac在创建控制器实例的时候根据参数类型(不注入的走无参构造函数),去容器取对应实例进行注入

ApiController中构造注入功能

public class PATController : ApiController
{private readonly IPATService patService;public PATController(IPATService _patService){patService = _patService;}
}

Winform

注意事项:直接以接口的方式进行注入。
注入和AOP拦截

  public class AutofacBuilder{private static IContainer _container;public static void Init(){ContainerBuilder builder = new ContainerBuilder();// builder.RegisterType<Service1>().As<Service1>(); //这一句可以不要,因为下面已经把当前程序集下的类注入了ico容器//注册拦截器到容器builder.RegisterType<AOPInterceptor>();//在注册类型到容器的时候动态注入拦截器//builder.RegisterType<DeviceI>().As<IDevice>().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));//注册当前程序集的所有类成员builder.RegisterAssemblyTypes(System.Reflection.Assembly.GetExecutingAssembly()).AsImplementedInterfaces().EnableInterfaceInterceptors().InterceptedBy(typeof(AOPInterceptor));_container = builder.Build();  //只有在Build之后,才能调用Resolve<T>()}public static T Resolve<T>(){return _container.Resolve<T>();}}

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

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

相关文章

[MySQL] MySQL基础操作汇总

文章目录 前言1.数据库概述1.1 数据库相关概念1.2登录MySQL&#xff1a;1.3 MySQL常用命令1.4表&#xff1a;1.5SQL语句分类&#xff1a; 2.CRUD操作2.1 DQL1.基础查询基础查询&#xff08;简单查询&#xff09;条件查询&#xff1a;排序查询&#xff1a;分组查询&#xff1a;分…

《golang设计模式》第二部分·结构型模式-03-组合模式(Composite)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 将叶子节点和复合节点组合起来&#xff0c;定义一个抽象接口遍历他们 1.1 角色 Component&#xff08;抽象构件&#xff09;&#xff1a;为叶子构件和复合构件声明接口&#xff0c;定义了结构…

Python面试题100例【26~30题】

二十六、请介绍下Django框架的生命周期 Django是一个高级的Python Web框架&#xff0c;它遵循MVC设计模式&#xff08;在Django中通常称为MTV&#xff0c;即模型&#xff08;Model&#xff09;、模板(Template)和视图(Views)&#xff09;&#xff0c;并且鼓励快速开发和干净、…

使用element-plus组件,默认显示英文 转换为中文

最近在边写项目边学习vue3 所以这几天没有更新 找机会把vue3的知识也统计一下吧 先说今天遇到的问题 最近做项目的时候使用element-plus分页组件时发现&#xff0c;显示的不是中文的了&#xff0c;是英文的 解决方法 在app.vue里面配置 <template><el-config-provi…

ROS2 CLI工具

目录 节点topic参数launch录包 节点 查看所有node&#xff1a;ros2 node list查看某个node的信息&#xff1a;ros2 node info node_name topic 查看topic输出&#xff1a; ros2 topic echo <topic_name> 查看topic频率&#xff1a;ros2 topic hz <topic_name> …

美创科技“签”手柠檬文才学堂,共推高校数据安全建设

近日&#xff0c;由柠檬文才学堂联合中国教育在线、东北财经大学网络教育学院共同主办的“三教统筹下高校继续教育数字化转型研讨”顺利召开。 国内高等院校&#xff08;高职院校&#xff09;继续教育分管领导&#xff0c;继续教育学院领导及继续教育信息化、教学教务管理、课程…

今天的小结

1、冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地遍历待排序的元素列表&#xff0c;比较相邻的元素并交换它们的位置&#xff0c;直到整个列表排序完成。冒泡排序的基本思想是通过不断交换相邻元素&#xff0c;将最大&#…

Qt——QLabel控件常见的属性、方法和信号

QLabel 控件常见的属性、方法和信号 一、QLabel 控件常见属性 二、QLabel 控件常见方法 三、QLabel 控件常见信号 方法&#xff1a; setxxx设置属性、去掉set就是获取属性 所有控件中的属性和方法都是通用的 QLabel 控件 描述&#xff1a;QLabel 是一个用于显示文本或图像…

C++之ifstream成员函数get、tellg、eof实例(一百八十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Java使用 Gson 将对象转换为 JSON 字符串

在开发过程中&#xff0c;经常需要将 Java 对象转换为 JSON 字符串&#xff0c;以实现数据的序列化和传输。Gson 是一个流行的 Java 库&#xff0c;它提供了方便的方法来将对象转换为 JSON 字符串。本文将介绍使用 Gson 库的步骤&#xff0c;将一个对象转换为 JSON 字符串&…

前端实习day35

今天是下早班的一天&#xff0c;下完班直接赶车回广州了&#xff0c;吐槽一下深圳站管理得真得差&#xff0c;候车厅小&#xff0c;人巨多&#xff0c;而且进站口的标识也很少&#xff0c;绕了好久才找到&#xff01;下次再也不去了。 今天是改bug的一天&#xff0c;但是有半天…

范式 事务 多表查询

范式 概念&#xff1a;设计数据库时&#xff0c;需要遵循的一些规范。要遵循后边的范式要求&#xff0c;必须遵循前边的所有范式要求 第一范式&#xff1a; 数据库表的每一列都是不可分割的基本数据项 这样子就不满足第一范式 这样子就满足第一范式 存在问题&#xff1a; 数…

无涯教程-PHP - 返回类型声明

在PHP 7中&#xff0c;引入了一个新函数返回类型声明&#xff0c;返回类型声明指定函数应返回的值的类型&#xff0c;可以声明返回类型的以下类型。 intfloatbooleanstringinterfacesarraycallable 有效返回类型 <?phpdeclare(strict_types1);function returnIntValue(i…

Unity打包Windows程序,概率性出现无法全屏或分辨率不匹配

排除代码和Resolution and Presentation面板设置问题 如果程序还是不能按照预期的分辨率运行&#xff0c;应该是系统注册表记录了对应的设置。 解决方案&#xff1a; 打开注册表&#xff0c;使用快捷键“Win” "R"组合快捷键。在打开后面键入命令&#xff1a;Rege…

一键快速还原修复人脸,CodeFormer 助力人脸图像修复

今天在查资料的时候无意间看到了一个很有意思的工具&#xff0c;就是CodeFormer &#xff0c;作者给出来的说明是用于人脸修复任务的&#xff0c;觉得很有意思就拿来实践了一下&#xff0c;这里记录分享一下。 首先对人脸修复任务进行简单的回顾总结&#xff1a; 人脸修复是指…

关于gRPC微服务利弊之谈

gRPC微服务架构包括以下几个主要组件&#xff1a; 服务定义&#xff1a;定义服务的接口和消息格式&#xff0c;使用Protocol Buffers或其他的消息格式进行描述。服务实现&#xff1a;实现定义的服务接口和消息处理逻辑。服务器端实现&#xff1a;在服务器端&#xff0c;需要实…

分发饼干【贪心算法】

分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个…

MATLAB中符号变量的使用方法解析

简介 MATLAB中常常使用符号变量&#xff0c;这里定义符号变量的函数是syms 使用方法如下 syms x y z 其中&#xff0c;x、y、z 是符号变量&#xff0c;可以是任意字母、数字或下划线组合而成的字符串。 举例1&#xff1a; 代码 以下是一个简单的例子&#xff0c;演示如何…

爬虫入门01

1. 请求头中最常见的一些重要内容 User-Agent : 请求载体的身份标识(⽤啥发送的请求)Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token) 2. 响应头中一些重要内容 cookie: 本地字符串数据信息(⽤户登录信息, 反…

Vue开发之父子组件

创建父子组建&#xff0c;分三步。一是创建文件&#xff0c;二是引入组建&#xff0c;三是组件间通信。在components目录下新建sub文件夹&#xff0c;用于存放一下可以复用的子组件。比如新建一个SubCon.vue组件 <template><div class"first-app">{{ ms…