zoukankan      html  css  js  c++  java
  • 学习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目录下, 所以还有个小小的设置需要注意一下 

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

  • 相关阅读:
    测试精进之路
    访问Apache服务器自动跳转到https协议
    如何安装Chrome OS系统
    遇到Project Target Framework Not Installed解决方法
    2019开发者调查结果和总结
    「工具神器」推荐一个扒网页的神器
    Linux 使用Unzip提示write error (disk full?). Continue? (y/n/^C)的解决方法
    安卓编译Failed to authenticate Jack server certificate错误问题解决办法
    如何手动给APK文件签名
    如何给个人网站添加免费的SSL
  • 原文地址:https://www.cnblogs.com/misterge/p/3970972.html
Copyright © 2011-2022 走看看