当前位置: 移动技术网 > IT编程>开发语言>.net > 使用Unity容器实现属性注入

使用Unity容器实现属性注入

2019年05月25日  | 移动技术网IT编程  | 我要评论

东陵大盗电影版,阿路龟,山西视听网

简介

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>();

这样就获取到了容器里面的内容。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网