C#中可使用Unity容器实现属性注入

简介

UnityUnity是微软团队开发的一个轻量级,可扩展的依赖注入容器,为松散耦合应用程序提供了很好的解决方案,支持构造器注入,属性注入,方法注入。

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

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

实现

使用NuGet程序包添加引用:

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

如:

 C#中可使用Unity容器实现属性注入_第1张图片

配置文件如下:

复制代码
xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
  
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Unity.Configuration" />
  configSections>
  <unity>
    <containers>
      <container>
        
        <register type="命名空间,程序集名称" mapTo="命名空间,程序集名称">
          <lifetime type="singleton" />
          
          <property name="Url" value="*****" />
          
          <property name="UserName" value="*****" />
          
          <property name="UserPassword" value="*****"/>
        register>      
      container>
    containers>
  unity>
configuration>
复制代码

配置文件初始化:

复制代码
var configFileNames = Directory.GetFiles(@"D:\某个文件夹", "*.config");
if (configFileNames.Length != 1)
{
 MessageBox.Show($@"D:\‘某个文件夹’里面必须只能一个配置文件,现在有{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();

最后使用Resolve去解析:

var vmMain = UC.Resolve();

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

备注:原文转载自博主个人站风景旧岑谙?,原文链接使用Unity容器实现属性注入。

你可能感兴趣的:(C#中可使用Unity容器实现属性注入)