• 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());
  • 相关阅读:
    指向行数组指针和指针数组的区别
    安装文件在icinga上安装check_mk
    模式浏览器火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题
    执行对象java面试题目2013/5/16
    属性序列化gson的@Expose注解和@SerializedName注解
    语言编译器编程语言分类及入门
    按钮实现Python绘图工具matplotlib的使用
    实现注册表网页超链接调用应用程序实现
    服务方法android如何保证service不被杀死
    函数日期mysql获取当天日期
  • 原文地址:https://www.cnblogs.com/DavidAi/p/13043912.html
Copyright © 2020-2023  润新知