.NET中实现IOC有很多方式,比如:Unity、Ninject、Autofac、MEF
Ninject的实现参考《Pro ASP.NET MVC3.5 FrameWork》
下面给出的是Unity的实现,结合配置文件实现的IOC。
配置示例:
<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
    </configSections>
    <unity>
        <typeAliases>
            <!--管理对象生命周期的三种方式-->
            <!--创建单例实例-->
            <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
            <!--只可以保持对象的弱引用-->
            <typeAlias alias="external" type="Microsoft.Practices.Unity.ExternallyControlledLifetimeManager, Microsoft.Practices.Unity" />
            <!--在同一个线程返回同一个对象实例,不同线程对象实例不相同 -->
            <typeAlias alias="perThread" type="Microsoft.Practices.Unity.PerThreadLifetimeManager, Microsoft.Practices.Unity" />
            
            <!--别名-->
            <typeAlias alias="ICustomerInfo" type="Yintai.ERP.Service.Customer.Interface.ICustomerInfo,Yintai.ERP.Service.Customer.Interface" />
            <typeAlias alias="CustomerInfo" type="Yintai.ERP.Service.CustomerInfo.CustomerInfoService,Yintai.ERP.Service.CustomerInfo" />
        </typeAliases>
        <containers>
            <container name="ContainerService">
                <!--注册类型-->
                <register type="ICustomerInfo" mapTo="CustomerInfo">
                    <lifetime type="singleton"/>
                </register>
            </container>
        </containers>
    </unity>
</configuration>

C#代码:
private ICSWorkBusiness cSWorkBusiness=null;
/// <summary>
/// 构造函数
/// </summary>
public CSWorkService()
{
     cSWorkBusiness=ServiceBusContainer.Instance.Container.Resolve<ICSWorkBusiness>();
}

更多阅读资料:
微软企业库Unity学习笔记(一):http://www.cnblogs.com/rush/archive/2011/02/12/EntlibUnity.html
微软企业库Unity学习笔记(二):http://www.cnblogs.com/rush/archive/2011/04/16/Unity.html

补充2017-8-8:
InjectionConstructor --构造函数注入(多重载构造函数)
InjectionMethod --方法注入
Dependency --属性注入
Dependency(“name”) --给属性命名

项目中的代码结构:

指定类型:

配置映射关系:

应用层==》
定义IOC容器:

容器代码:
using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

namespace Wede.ERP.Service.CRM
{

public sealed class CRMServiceContainer
    {
        private static CRMServiceContainer _instance;
        private string configFile = "";
        private string _ContainerName = "ContainerService";
        static readonly object lockobj = new object();
        private static IUnityContainer crmServiceUnityContainer;

/// <summary>
        /// 构造函数,得到Unit配置文件
        /// </summary>
        private CRMServiceContainer()
        {
            configFile = Wede.ERP.Config.BaseConfig.GetServiceCrmUnityConfigPath;
            if (string.IsNullOrEmpty(configFile))
            {
                throw new Exception(Wede.ERP.Config.BaseConfig.ErrorMessage);
            }
            else
            {
                configFile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,configFile);
            }
        }

/// <summary>
        /// 单例方式实例化
        /// </summary>
        public static CRMServiceContainer Instance
        {
            get
            {
                lock (lockobj)
                {
                    if (_instance == null)
                    {
                        _instance = new CRMServiceContainer();
                    }
                    return _instance;
                }
            }
        }
        private object lockObj = new object();
        /// <summary>
        /// 初始化Unity的IoC容器对象
        /// </summary>
        public IUnityContainer Container
        {
            get
            {
                if (crmServiceUnityContainer == null)
                {
                    lock (lockObj)
                    {
                        crmServiceUnityContainer = new UnityContainer();
                        ExeConfigurationFileMap basicFileMap = new ExeConfigurationFileMap
                        {
                            ExeConfigFilename = configFile
                        };
                        UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager
                            .OpenMappedExeConfiguration(basicFileMap, ConfigurationUserLevel.None)
                            .GetSection("unity");
                        section.Configure(crmServiceUnityContainer, _ContainerName);
                    }
                }
                return crmServiceUnityContainer;
            }
        }
        public T Resolve<T>()
        {
            return Container.Resolve<T>();
        }
    }
}
应用层==》服务层应用:

转载于:https://www.cnblogs.com/zhaow/p/9754515.html

IOC实现-Unity相关推荐

  1. [IoC容器Unity]第四回:使用范例

    1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...

  2. IoC组件Unity再续~根据类型字符串动态生产对象

    回到目录 这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者XML文件里,在使用 ...

  3. [IoC容器Unity]第三回:依赖注入

    上节介绍了,Unity的Lifetime Managers生命周期,Unity具体实现依赖注入包含构造函数注入.属性注入.方法注入,所谓注入相当赋值,下面一个一个来介绍. 2.构造函数注入 Unity ...

  4. [IoC容器Unity]第一回:Unity预览

    出处:http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html 请看原文,三篇文章. 转载于:https://blog.51cto.co ...

  5. 理解依赖注入(IOC)和学习Unity

    IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一起,解耦, ...

  6. 想爱容易,相处难:当ASP.NET MVC爱上IoC

    也许你会问ASP.NET MVC为什么会爱上IoC? 相爱的理由常常很简单,就像一首歌中所唱--"只为相遇那一个眼神". 而ASP.NET MVC爱上IoC只为IoC能实现MVC控 ...

  7. 控制反转(Ioc)和依赖注入(DI)

    控制反转IOC, 全称 "Inversion of Control".依赖注入DI, 全称 "Dependency Injection". 面向的问题:软件开发 ...

  8. 理解依赖注入(IOC)

    IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一起,解耦, ...

  9. Unity Application Block 3月12 发布的版本

    3月12日,Unity 又发布了正式发布之前的版本,这个版本提供了安装程序.并且提供了一个依赖注入在实现方式:Setter injection 的配置API.之前发布的版本,属性注入需要用[Depen ...

  10. Unity Contrib Project和资料

    Unity 1.0已经发布了,参看(Unity Application Block 发布),在codeplex上有开发社区建立的一个Unity Contrib Project. 项目包含Unity 的 ...

最新文章

  1. VALSE 2020来了!60位计算机视觉、模式识别领域的优秀青年学者齐聚一堂
  2. c/c++程序员的技术栈
  3. weblogic占用java_weblogic内存占用过大调优
  4. Sql Server临时表中插入标示列
  5. python函数参数学习_python学习笔记-11.函数参数和返回值进阶
  6. java实现k-means算法(用的鸢尾花iris的数据集,从mysq数据库中读取数据)
  7. Java 连接sql server
  8. Linux学习笔记:wc查看文件字节数、字数、行数
  9. FPGA实现任意角度旋转图片
  10. 3dXXX Android,Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
  11. BUU-RSA入门题合集 第二弹
  12. CSP-S 2022 总结
  13. Flink Table 和 DataStream 转换
  14. 风险中性贴现-短期利率贴现
  15. 阿里云服务器部署可道云
  16. 小航助学答题系统编程等级考试scratch一级真题2023年3月(含题库答题软件账号)
  17. 用pycharm写python_在PyCharm中使用VPython
  18. SQL Server登录连接失败之解决方案
  19. Android-Camera内存问题剖析,小白也能看明白
  20. 矢量线八方向和全方向栅格化算法C#实现

热门文章

  1. Spring Cloud 系列之 Netflix Eureka 注册中心
  2. La3713 Astronauts 2-Sat
  3. uva1391-Astronauts
  4. MMdetection的Proposal原理和代码解析
  5. word基本功:给样式设置多级编号
  6. 详细介绍如何使用MATLAB中的机器人工具箱建立机器人模型(DH法建模)(机械臂)
  7. 三国志·魏书·牵招传
  8. 开源OA协同办公系统:O2OA搭建企业微信办公首页说明
  9. 使用PS更改照片的背景色
  10. AXD 调试经验,使用及问题