IOC容器Unity的使用及独立配置文件Unity.Config
【本段摘录自:IOC容器Unity 使用http://blog.csdn.net/gdjlc/article/details/8695266】
面向接口实现有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等,但是接口一定是需要实现的,如果一个子类实现换成另一个子类实现,就需要在代码中改动,或者建立一个工厂来根据条件生成,还是存着着一定的耦合关系。
依赖注入(Dependency Injection,DI),也叫控制反转(Inversion of
Control,IoC)是一个重要的面向对象编程的法则用来削减程序的耦合问题,它把耦合从代码中移出去,放到统一的XML文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,当需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以,这样可以实现对象的热插拨(有点象USB接口)。
Unity 是一个轻量级、可扩展的依赖注入容器,支持构造函数、属性和方法的依赖注入。
1.C# Unity使用(独立配置文件unity.config)
重要内容摘录:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity configSource="unity.config" />
</configuration>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<!--alias 定義別名-->
<alias alias="IClass" type="ConsoleApplication1.IClass, ConsoleApplication1" />
<alias alias="MyClass" type="ConsoleApplication1.MyClass, ConsoleApplication1" />
<!--引入下面的命名空間,可以省的輸入過多的內容-->
<namespace name="ConsoleApplication1" />
<assembly name="ConsoleApplication1" /> <container >
<register type="IClass" mapTo="MyClass" />
<register type="ILogger" mapTo="FileLogger"></register> <!--註冊類+構造函數 默認數值是3-->
<register type="InstallerBase" mapTo="BlogInstaller">
<constructor>
<param name="pubContext" type="IPubContext" />
<param name="sum" type="System.Int32" value="3" />
</constructor>
</register> <!--<register type="ISomeInterface[]" mapTo="MyTypeImplementingSomeInterface[]"/>-->
<register type="ISomeInterface[System.Int32]" mapTo="MyTypeImplementingSomeInterface[System.Int32]"/> <register type="ObjectWithOverloads" name="callFirstOverload">
<method name="CallMe">
<param name="param" type="int" value="17"/>
</method>
</register> <register type="ILogger" mapTo="MockLogger" name="validLogger" />
<register type="ObjectUsingLogger" name="dependencyRegistered">
<property name="Logger">
<optional name="validLogger" />
</property>
</register>
<!--數值-->
<register type="ILogger" name="main" mapTo="MockLogger" />
<register type="ILogger" name="another" mapTo="MockLogger" />
<register type="ILogger" name="special" mapTo="SpecialLogger" />
<register type="ArrayDependencyObject" name="specificElements">
<property name="Loggers">
<array>
<dependency name="main" />
<dependency name="another" />
</array>
</property>
</register>
</container> </unity>
2. Using Unity for IoC and DI(codeproject国外网站给出的如何将unity.config作为web.config或者app.config的独立配置文件来引入)
<configSections>
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity configSource="unity.config"/> 此处给出unity.config文件的具体代码:
<?xml version="1.0" encoding="utf-8"?>
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<typeAliases>
<!-- Models-->
<typeAlias alias="IBook" type="BusinessBackend.IBook, BusinessBackend" />
<typeAlias alias="Book" type="BusinessBackend.Book, BusinessBackend" />
<!-- Services -->
<typeAlias alias="IBookService" type="BusinessBackend.IBookService, BusinessBackend" />
<typeAlias alias="BookService" type="BusinessBackend.BookService, BusinessBackend" />
<!-- Repositories -->
<typeAlias alias="IBookRepository" type="BusinessBackend.IBookRepository, BusinessBackend" />
<typeAlias alias="BookRepository" type="BusinessBackend.BookRepository, BusinessBackend" />
</typeAliases>
<container>
<register type="IBook" mapTo="Book" />
<register type="IBookRepository" mapTo="BookRepository" name="SQLrepo" />
<register type="IBookService" mapTo="BookService" >
<constructor>
<param name="br" dependencyName="SQLrepo">
<!--<param name="br" dependencyType="BookRepository">-->
<!--<dependency type="BookRepository" />-->
<!--<dependency name="SQLrepo" />-->
</param>
</constructor>
</register>
</container>
</unity>
3.Unity 2.0 Web.config settings with MVC(使用unity的答疑帖子)
http://stackoverflow.com/questions/3925019/unity-2-0-web-config-settings-with-mvc
IOC容器Unity的使用及独立配置文件Unity.Config的更多相关文章
- [IoC容器Unity]第四回:使用范例
1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...
- AutoFac使用~IOC容器(DIP,IOC,DI)
#cnblogs_post_body h1 { background-color: #A5A5A5; color: white; padding: 5px } Autofac一款IOC容器,据说比Sp ...
- 企业级应用框架(五)IOC容器在框架中的应用
前言 在上一篇我大致的介绍了这个系列所涉及到的知识点,在本篇我打算把IOC这一块单独提取出来讲,因为IOC容器在解除框架层与层之间的耦合有着不可磨灭的作用.当然在本系列前面的三篇中我也提供了一种基于反 ...
- IOC容器在框架中的应用
IOC容器在框架中的应用 前言 在上一篇我大致的介绍了这个系列所涉及到的知识点,在本篇我打算把IOC这一块单独提取出来讲,因为IOC容器在解除框架层与层之间的耦合有着不可磨灭的作用.当然在本系列前面的 ...
- 模拟实现IoC容器
Spring的IoC核心就是控制反转,将对实现对象的操作控制器交出来,由IoC容器来管理,从配置文件中获取配置信息,Java对XML文档提供了完美的支持,dom4j功能强大,而下面我就用JDOM这一开 ...
- 总结Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下: unityContainer = new Un ...
- Unity IOC容器通过配置实现类型映射的几种基本使用方法
网上关于Unity IOC容器使用的方法已很多,但未能做一个总结,故我这里总结一下,方便大家选择. 首先讲一下通过代码来进行类型映射,很简单,代码如下 unityContainer = new Uni ...
- [IoC容器Unity] :Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
- [IoC容器Unity]第一回:Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
随机推荐
- CentOS 系统中安装postfix+dovecot+openwebmail <转>
一.先卸载sendmain[root@ser ~]# yum remove sendmail 二.安装postfix ,dovecot,cyrus-sasl[root@ser ~]# yum -y ...
- Android, BaseAdapter 处理大数据量时的优化
Android优化 最常见的就是ListView, Gallery, GridView, ViewPager 的大数据优化 图片优化 访问网络的优化优化的原则: 数据延迟加载 分批加载 本地缓 ...
- How to install / setup /upgrade PHP 5.5.x on Ubuntu 12.04 LTS
原文:http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/ 最近遇到了要在ubunt ...
- ztree异步加载
Ztree异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 直接贴代码(SpringMvc+Mybatis): 前台页面ztreeList.jsp: ...
- VMware克隆CentOS虚拟机后固定IP的问题
由于克隆虚拟机,VMware只是修改了虚拟机的名字等信息,并没有修改虚拟硬盘中的任何信息,导致克隆后网卡的MAC地址和操作系统中记录的mac地址不符,导致eth0启动不起来.操作系统记录了一个新网卡的 ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- openssl windows编译 32位&64位
openssl版本:openssl-1.0.0k 64位编译 1.编译环境: openssl-1.0.0a必须用vs2008编译(Open Visual Studio 2008 x64 Cross T ...
- 解决IntelliJ IDEA 创建Maven项目速度慢问题 DarchetypeCatalog
原因 IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件. 该命令的 ...
- 卷积神经网络(CNN)新手指南 1
http://blog.csdn.net/real_myth/article/details/52273930 卷积神经网络(CNN)新手指南 2016-07-29 18:22 Blake 1条评论 ...
- JAVA基础--正则表达式
. any character \d A digit 0-9 \D a non-digit [^0-9] \s a whitespace character, 空白字符 \S a non-w ...