.NetCore【工作应用】Unity
Unity
Unity是一个IoC
容器,用来实现依赖注入(Dependency Injection
,DI),减少耦合
Unity安装
install-package Unity
使用
IUnityContainer container = new UnityContainer();//1、定义一个空容器
container.RegisterType<IDbInterface, DbMSSQL>();//2、注册类型,表示遇到IDbInterface的类型,创建DbMSSQL的实例
var db = container.Resolve<IDbInterface>();
注入方式
-
构造函数注入
-
属性注入
-
方法注入
三种注入方式的执行顺序:构造函数注入->属性注入->方法注入
默认情况下如果构造函数上面没有使用特性,那么默认找参数最多的构造函数执行注入
生命周期
-
瞬时生命周期
无状态或者轻量的,使用不太频繁的临时对象
-
单例
整个应用,计数器,单例的服务
-
线程单例
一个请求
-
其他生命周期
-
解析生命周期
-
分层生命周期
-
配置文件
- 安装包
install-package Unity.Interception.Configuration
- 配置文件
如果是单独文件的话需要设置为始终复制
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
</configSections>
<unity>
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>
<containers>
<container name="testContainer">
<!--逗号前面是接口类型的完全限定名:命名空间+接口名称,逗号后面是DLL文件的名称 name解决同一个接口不同实例问题-->
<register type="Demo.IocUnity.IDbInterface,Demo.IocUnity" mapTo="Demo.IocUnity.DbMSSQL, Demo.IocUnity" name="sql"/>
<register type="Demo.IocUnity.IDbInterface,Demo.IocUnity" mapTo="Demo.IocUnity.DbOracle, Demo.IocUnity" name="oracle"/>
</container>
</containers>
</unity>
</configuration>
- 读取配置实现
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Unity.config");//找配置文件的路径
Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
IUnityContainer container = new UnityContainer();
section.Configure(container, "testContainer");
IDbInterface db = container.Resolve<IDbInterface>("sql");
实现原理
-
反射
如何找构造函数
-
根据特性来找
[InjectionConstructor]
-
参数最多
-
-
dictionary映射
单例和线程单例实现的区别:
ThreadLocal
ThreadLocal
的主要作用是让各个线程维持自己的变量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本