IOC实现-Unity
.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相关推荐
- [IoC容器Unity]第四回:使用范例
1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...
- IoC组件Unity再续~根据类型字符串动态生产对象
回到目录 这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者XML文件里,在使用 ...
- [IoC容器Unity]第三回:依赖注入
上节介绍了,Unity的Lifetime Managers生命周期,Unity具体实现依赖注入包含构造函数注入.属性注入.方法注入,所谓注入相当赋值,下面一个一个来介绍. 2.构造函数注入 Unity ...
- [IoC容器Unity]第一回:Unity预览
出处:http://www.cnblogs.com/qqlin/archive/2012/10/16/2717964.html 请看原文,三篇文章. 转载于:https://blog.51cto.co ...
- 理解依赖注入(IOC)和学习Unity
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一起,解耦, ...
- 想爱容易,相处难:当ASP.NET MVC爱上IoC
也许你会问ASP.NET MVC为什么会爱上IoC? 相爱的理由常常很简单,就像一首歌中所唱--"只为相遇那一个眼神". 而ASP.NET MVC爱上IoC只为IoC能实现MVC控 ...
- 控制反转(Ioc)和依赖注入(DI)
控制反转IOC, 全称 "Inversion of Control".依赖注入DI, 全称 "Dependency Injection". 面向的问题:软件开发 ...
- 理解依赖注入(IOC)
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一起,解耦, ...
- Unity Application Block 3月12 发布的版本
3月12日,Unity 又发布了正式发布之前的版本,这个版本提供了安装程序.并且提供了一个依赖注入在实现方式:Setter injection 的配置API.之前发布的版本,属性注入需要用[Depen ...
- Unity Contrib Project和资料
Unity 1.0已经发布了,参看(Unity Application Block 发布),在codeplex上有开发社区建立的一个Unity Contrib Project. 项目包含Unity 的 ...
最新文章
- VALSE 2020来了!60位计算机视觉、模式识别领域的优秀青年学者齐聚一堂
- c/c++程序员的技术栈
- weblogic占用java_weblogic内存占用过大调优
- Sql Server临时表中插入标示列
- python函数参数学习_python学习笔记-11.函数参数和返回值进阶
- java实现k-means算法(用的鸢尾花iris的数据集,从mysq数据库中读取数据)
- Java 连接sql server
- Linux学习笔记:wc查看文件字节数、字数、行数
- FPGA实现任意角度旋转图片
- 3dXXX Android,Android横竖屏 mdpi hdpi xhdpi xxhdpi xxxhdpi
- BUU-RSA入门题合集 第二弹
- CSP-S 2022 总结
- Flink Table 和 DataStream 转换
- 风险中性贴现-短期利率贴现
- 阿里云服务器部署可道云
- 小航助学答题系统编程等级考试scratch一级真题2023年3月(含题库答题软件账号)
- 用pycharm写python_在PyCharm中使用VPython
- SQL Server登录连接失败之解决方案
- Android-Camera内存问题剖析,小白也能看明白
- 矢量线八方向和全方向栅格化算法C#实现