学习Unity

IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection)。
作用:将各层的对象以松耦合的方式组织在一起,解耦,各层对象的调用完全面向接口。当系统重构的时候,代码的改写量将大大减少。
理解依赖注入:
    当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IOC容器来完成,然后注入调用者,因此也称为依赖注入。

.net中微软有一个轻量级的IoC框架Unity,支持构造器注入,属性注入,方法注入

首先我们先下载安装unity

具体实现方法如下所示:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

namespace UnityDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建容器
            IUnityContainer container = new UnityContainer();
            //注册映射
            container.RegisterType<IA, A>();
       //得到A的实例 var a = container.Resolve<IA>(); var b = new B(a); b.Method(); Console.ReadKey(); } } public interface IA { void Method(); } public class A : IA { public void Method() { Console.WriteLine("A test "); } } public class B : IA { public IA a; public B(IA a) { this.a = a; } public void Method() { a.Method(); Console.WriteLine("B test"); } } }

配置文件实现方式

配置文件配置

  

<?xml version="1.0" encoding="utf-8" ?>
<configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <containers>
      <container name="defaultContainer">
        <register type="UnityDemo.IA,UnityDemo" mapTo="UnityDemo.A,UnityDemo" />
      </container>
    </containers>
  </unity>
</configuration>
UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)  
            as UnityConfigurationSection;  
configuration.Configure(container, "defaultContainer");

  container.RegisterType<IA, A>();
  var a = container.Resolve<IA>();
  var b = new B(a);
  b.Method();

和所有的 IOC 框架一样,我们可以使用 XML 文件来配置 Unity。建议使用一个单独的 XML 配置文件,因为 app.config/web.config 已经被塞入太多的东西。修改配置的时候既不清晰,也容易出错。

我们新建一个配置文件:Unity.config

配置文件所配置的内容都一样这里就不多说 了

我们来看一下加载配置文件后台代码:

var configMap = new ExeConfigurationFileMap { ExeConfigFilename = "Unity.config" };
            var configuration = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
            IUnityContainer container = new UnityContainer();
            var section = (UnityConfigurationSection)configuration.GetSection("unity");
            section.Configure(container, "defaultContainer");
            var a = container.Resolve<IA>();
            var b = new B(a);
            b.Method();

这里读取的配置文件默认是程序bin目录下, 所以还有个小小的设置需要注意一下 

设置一下你自己定义的配置文件的属性->高级:复制输出到目录选择如果较新则复制

原文地址:https://www.cnblogs.com/misterge/p/3970972.html