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架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
随机推荐
- 关于MyEclipse 半天打不开的问题(工作区间损坏)--转
删掉 {workspace}/.metadata/.plugins\**\*.snap 所有的 .snap文件 一般可以解决问题 如果上面一步解决不了问题, 那么删掉 {workspace}/.met ...
- UIView 视图切换
UIView之间常用视图之间切换方式 转载自:http://www.jianshu.com/p/0d53f9402c07 在平时编写代码的过程中,页面之间的跳转可以说就和MVC模式一样是开发必须的.但 ...
- 用Java开源项目JOONE实现人工智能编程
http://www.robotsky.com/ZhiN/MoS/2011-08-25/13142461416649.html 用Java开源项目JOONE实现人工智能编程 https://sourc ...
- android4.0 的图库Gallery2代码分析(四) 之相册的数据处理以及显示
最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...
- source command not found in sh shell解决办法
在Ubuntu系统中执行脚本的时候突然出现错误"source command not found in sh shell" 这个其实在Ubuntu 当中 执行脚本默认的使用的是da ...
- pymongo一次更新多条数据
db.collection.update(query, update, upsert, multi) pymongo使用示例 db.collection.update({}, {'$set' : {' ...
- matlab中gatbx工具箱的添加
1. 从http://crystalgate.shef.ac.uk/code/下载工具箱压缩包gatbx.zip 2. 解压gatbx.zip,将其子文件夹genetic放在matlab安装目录too ...
- ASP.NET AJAX 创建类
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...
- php中使用mysql_fetch_array输出数组至页面中展示
用的是CI框架,很好的MVC结构 在Model层 public function showProteinCategory(){ $sql = "SELECT DISTINCT protein ...
- ZOJ 3780 Paint the Grid Again
拓扑排序.2014浙江省赛题. 先看行: 如果这行没有黑色,那么这个行操作肯定不操作. 如果这行全是黑色,那么看每一列,如果列上有白色,那么这一列连一条边到这一行,代表这一列画完才画那一行 如果不全是 ...