首页
登录 | 注册

使用Unity容器实现属性注入

简介

Unity :是微软用C#实现的轻量级,可扩展的依赖注入容器。

控制反转:(Inversion of Control,缩写为IoC),是用来消减程序之间的耦合问题,把程序中上层对下层依赖,转移到一个第三方容器中来装配。

依赖注入:(Dependency Injection,缩写为DI):我们向容器发出请求以后,获得这个对象实例的过程就叫依赖注入。

实现

使用NuGet程序包添加引用:

输入Unity.Configuration搜索并下载会自动添加所需的包(Unity.Container,System.Runtime.CompilerServices.Unsafe,Unity.Abstractions)

 使用Unity容器实现属性注入

配置文件如下:

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

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

 


相关文章

  • 问题引入 在ASP.NET Core - 依赖注入这篇文章里面,我们知道了如何利用ASP.NET Core原生的容器来实现依赖注入的,那我们为什么要替换掉默认的 IoC容器呢?从ASP.NET Core - 依赖注入这篇文章来看的话,默认的 ...
  • 依赖注入容器-- Autofac
    目录: 一.简介 二.如何使用 2.1.基本使用 2.2.接口使用 2.3. 其他注入 2.4. 注入的生命周期   一.简介 在上一篇文章中讲到替换默认服务容器,我们选择了Autofac Autofac---Autofac是一款IOC框架 ...
  • ASP.NET Core - 依赖注入
    考虑到主题问题,在这里不打算详细讲解依赖注入的概念,需要了解依赖注入的可以关注我的DI&IoC分类讲解,这里我们专注于ASP.NET Core 体系中系统自带的原生IoC容器是如何让我们实现注入和解析的. 服务的生命周期 在开始之前 ...
  • 浅谈unity中gamma空间和线性空间
    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述    很久没有写文章了,今天写一篇对gamma空间和线性空间的个人理解总结,在查阅和学习了各个资料后,算是一个个人笔记吧.   二.Gamma颜色空间和 ...
  •   计算属性是基于响应式依赖进行缓存的,只有在相关响应式依赖发生改变时才会重新求值,这种缓存机制在求值消耗比较大的情况下能够显著提高性能. 一.计算属性初始化   Vue 在做数据初始化时,通过 initComputed() 方法初始化计算 ...
  • 转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述 整理遇到的一些较难处理的bug,总结相关经验 二.主要问题 2.1 material类型的依赖修改 对于material类型的asset,如果修改了其s ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.073 s.
京ICP备10005923号