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());
  • 相关阅读:
    易语言常用源码
    ci的数据库地址
    格式化输出php数组
    mysql插入表情问题
    线程、进程与协程2
    线程、进程与协程
    if __name=='__main__"的作用
    动态导入模块
    面向对象补充之方法
    getpass模块
  • 原文地址:https://www.cnblogs.com/DavidAi/p/13043912.html
Copyright © 2011-2022 走看看