zoukankan      html  css  js  c++  java
  • IOC容器:Unity

    一、什么是IOC

    学习IOC之前先来了解一个依赖导致原则(DIP),依赖导致原则是IOC的核心原理。

    依赖导致:即上层模块不应该依赖于低层模块,二者应该通过抽象来依赖。依赖于抽象,而不是依赖于细节。

    首先来看下面的例子:

    1、定义一个接口,封装数据库的基本CRUD操作,接口定义如下:

      public interface IDbInterface
        {
            string Insert();
            string Delete();
            string Update();
            string Query();
        }

    2、定义一个MSSQL类实现该接口,用来模仿SQLServer操作,MSSQL类定义如下:

     public class DBMSSQL : IDbInterface
        {
            public string Delete()
            {
                return "MSSQL执行删除";
            }
    
            public string Insert()
            {
                return "MSSQL执行插入";
            }
    
            public string Query()
            {
                return "MSSQL执行查询";
            }
    
            public string Update()
            {
                return "MSSQL执行更新";
            }
        }

    3、定义一个Oracle类实现该接口,模仿Oracle的操作,Oracle类定义如下:

      public class DBORA : IDbInterface
        { 
            public string Delete()
            {
                return "Oracle执行删除";
            }
    
            public string Insert()
            {
                return "Oracle执行插入";
            }
    
            public string Query()
            {
                return "Oracle执行查询";
            }
    
            public string Update()
            {
                return "Oracle执行更新";
            }
        }

    4、使用配置文件实现

    <configuration>
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
      </configSections>
      <unity>
        <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration"/>
        <containers>
          <container name="testContainer">
             <!--逗号后面是程序集的名称-->
            <register type="IOCConsoleApp.IDbInterface,IOCConsoleApp" mapTo="IOCConsoleApp.MSSQL.DBMSSQL,IOCConsoleApp" name="sql"/>
            <register type="IOCConsoleApp.IDbInterface,IOCConsoleApp" mapTo="IOCConsoleApp.ORA.DBORA, IOCConsoleApp" name="oracle"/>
          </container>
        </containers>
      </unity>
    </configuration>

    注意:这个一个单独的配置文件,要把属性里面的复制到输出目录改为始终复制,那么这个配置文件才会生成到Debug目录里面。

    程序如下:

     
       ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
       fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "unity.config");//找配置文件的路径
       Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
       UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
       IUnityContainer container = new UnityContainer();
       section.Configure(container, "testContainer");
       IDbInterface db = container.Resolve<IDbInterface>("sql");
       Console.WriteLine(db.Insert());
  • 相关阅读:
    896. Monotonic Array单调数组
    865. Smallest Subtree with all the Deepest Nodes 有最深节点的最小子树
    489. Robot Room Cleaner扫地机器人
    JavaFX
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
  • 原文地址:https://www.cnblogs.com/DavidAi/p/13043912.html
Copyright © 2011-2022 走看看