使用Unity容器实现属性注入
程序员文章站
2022-04-09 08:54:07
简介 Unity :是微软用C#实现的轻量级,可扩展的依赖注入容器。 控制反转:(Inversion of Control,缩写为IoC),是用来消减程序之间的耦合问题,把程序中上层对下层依赖,转移到一个第三方容器中来装配。 依赖注入:(Dependency Injection,缩写为DI):我们向 ......
简介
unity :是微软用c#实现的轻量级,可扩展的依赖注入容器。
控制反转:(inversion of control,缩写为ioc),是用来消减程序之间的耦合问题,把程序中上层对下层依赖,转移到一个第三方容器中来装配。
依赖注入:(dependency injection,缩写为di):我们向容器发出请求以后,获得这个对象实例的过程就叫依赖注入。
实现
使用nuget程序包添加引用:
输入unity.configuration搜索并下载会自动添加所需的包(unity.container,system.runtime.compilerservices.unsafe,unity.abstractions)
配置文件如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configsections> <!--定义配置节处理程序与配置元素之间的关联。--> <section name="unity" type="microsoft.practices.unity.configuration.unityconfigurationsection,unity.configuration" /> </configsections> <unity> <containers> <container> <!--type为对象的名称,mapto为注入对象的名称 写法为用逗号隔开两部分,一是类的全部,包括命名空间,二是程序集名称--> <register type="yk.interface.ipms,yk.interface" mapto="yk.pms.xlp.bjaite,yk.pms.xlp.bjaite"> <lifetime type="singleton" /> <!--api接口--> <property name="url" value="*****"></property> <!--用户名--> <property name="username" value="*****" /> <!--密码--> <property name="userpassword" value="*****"/> </register> </container> </containers> </unity> </configuration>
配置文件初始化:
var configfilenames = directory.getfiles(@"d:\ykconfig", "*.config"); if (configfilenames.length != 1) { messagebox.show($@"d:\ykconfig文件夹里面必须只能一个配置文件,现在有{configfilenames.length}个"); return; } var filemap = new execonfigurationfilemap { execonfigfilename = configfilenames[0] }; //从config文件中读取配置信息 var configuration = configurationmanager.openmappedexeconfiguration(filemap, configurationuserlevel.none); //获取指定名称的配置节 var section = (unityconfigurationsection)configuration.getsection("unity"); //创建容器 var _uc = new unitycontainer(); //载入容器 section.configure(_uc);
在vmmainwindow里添加公共成员,并用 [dependency]在上方标记:
[dependency] public ipms pms { get; set; }
用registersingleton去注册:
_uc.registersingleton<vmmainwindow>();
最后使用resolve去解析:
var vmmain = uc.resolve<vmmainwindow>();
这样就获取到了容器里面的内容。
上一篇: 摸裤头
下一篇: 小朋友的童年都经历了什么