參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html

http://www.cnblogs.com/qqlin/tag/Unity/

依赖注入容器Unity Application Block快速入门

http://www.cnblogs.com/zjypp/archive/2011/07/08/2319268.html

http://www.cnblogs.com/doriandeng/category/123100.html

主要內容:

1.Unity是什麽?

2.Unity能做什麽?

3.項目中什麽時候要使用到Unity?

2.快速入門

3.總結

一、Unity是什麽?

Unity是patterns & practices團隊開發的一個輕量級、可擴展的依賴注入字符串,具有如下的特性:

1.1它提供了創建(或者裝配)對象實例的機制,而這些對象實例可能還包含了其它被依賴的對象實例。

1.2Unity允許將預先配置的對象注入到類中,實現了控制反轉(IoC)的功能。在Unity中,支持構造器注入,屬性廟會注入以及方法注入。ps:這里的方法入與Martin Fowler定義的接口注入類似而稍有區別

1.3支持窗口的體系結構。一個容器可以有子容器,允許從子容器到父容器的對象定位查詢。

1.4可以通過配置文件進行準備和配置容器。

1.5不會影響到類的定義(屬性設值注入和方法注入除外),這也是輕量級容器的一個體現。

1.6支持自定義的窗口擴展。

二、Unity能做什麽?

2.1Unity支持簡單對象創建,特別是分層對象結構和依賴,以簡化程序代碼。其包含一個編譯那些可能存在依賴于其他對象的實例機制。

2.2Unity支持必要的抽象,其允許開發者在運行時或配置去指定依賴關係同時可以簡單的管理橫切點(AOP)。

2.3Unity增加了推遲到容器組件配置的靈活性。其同樣支持一個容器層次的結構。

2.4Unity擁有服務定位能力,對於一個程序在許多情況下重複使用組件來分享和集中功能是非常有用的。

2.5Unity允許客戶端儲存或緩存容器。對于在ASP.NET web applications中開發者將容器持久化于ASP.NET中的session或application中特別有效。

2.6Unity擁有攔截能力,其允許開發者通過創建并執行handlers(在方法或屬性被調用到達之前)來為已存在的組件增加一個函數,并再次為返回調用結果。

2.7Unity可以從標準配置系統中讀取配置信息,例如:XML文件,同時使用配置文件來配置容器。

2.8Unity支持開發者實現自定義窗口擴展,例如:你可以實現方法來額外的對象構造和容器特征,例如緩存。

2.9Unity允許架構師和開發者在現代化的程序中更簡單的實現通用設計模式。

三、項目中什麽時候要使用到Unity?

3.1所構建的系統依賴于健全的面向對象原則,但是大量不同的代碼交織在一起而難以維護。

3.2構建的對象和類需要依賴其他對象或類。

3.3依賴于複雜的需要抽象的對象。

3.4希望利用構造函數、方法或屬性的調用注入優勢。

3.5希望管理對象實例的生命週期。

3.6希望能夠在運行時管理并改變依賴關係。

3.7希望在攔截方法或属性调用的时候生成一个策略链或管道处理容器来实现横切(AOP)任务。

3.8希望在Web Application中的回發操作時能夠緩存或持久化依賴關係。

  除了单独解决横切关注点如日志、认证、授权、缓存和异常处理的组件以外,现代业务系统通常由定制的业务对象和在应用程序中完成特殊的或者一般的任务的组件组成。
  成功构建这样的应用程序的关键是获得解耦的或者极度松耦合的设计。松耦合的应用程序更加灵活、更加易于维护。同时在开发期间进行测试,可以模拟对象的桩(轻量级模拟的实现),这增强了实质的依赖。例如,数据库连接、网络连接、ERP 连接和富用户接口组件。
依赖注入是一种用于构建松耦合应用程序的主要技术。它提供了处理对象间依赖的方法。例如,一个处理用户信息的对象可能依赖于访问数据存储、验证信息和检查 用户是否被授权执行更新的其他对象。依赖注入技术可以确保用户类正确的初始化及组装所有这些对象,特别是依赖是抽象的地方。

  使用容器可以有很多好处,但它会改变应用程序的设计方式,尤其适合于基于组件的开发,朋友们可以有选择的使用它。

三、快速入門
  3.1 下载最新的是2.1版本,http://www.microsoft.com/download/en/details.aspx?id=17866

3.2 下载是msi文件,安装后有bin文件夹和源代码和几个实例项目

3.3 打开vs,新建项目,添加Microsoft.Practices.Unity.dll的引用,就可以使用依赖注入了

3.4準備接口和類

 public interface ILogger
{
void Write(string message);
} public class DatabaseLogger:ILogger
{
#region ILogger 成員
public void Write(string message)
{
Console.WriteLine(String.Format("Message:{0}",message));
Console.WriteLine("Target:Database");
} #endregion
} public class FlatFileLogger:ILogger
{
#region ILogger 成員
public void Write(string message)
{
Console.WriteLine(String.Format("Message:{0}", message));
Console.WriteLine("Target:FlatFile");
}
#endregion
}

准备接口和类

3.5客戶端代碼

 IUnityContainer container = new UnityContainer();
container.RegisterType<ILogger, DatabaseLogger>();
ILogger logger = container.Resolve<ILogger>();
logger.Write("TerryLee");
Console.ReadLine();

客戶端代碼

3.6運行結果

依賴注入入門——Unity(二)的更多相关文章

  1. 依賴注入入門——Unity(一)

    參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...

  2. Delphi APP 開發入門(二)Android/iOS設定,Hello World

    Delphi APP 開發入門(二)Android/iOS設定,Hello World 分享: Share on facebookShare on twitterShare on google_plu ...

  3. GOOGLE搜索從入門到精通V4.0

    1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...

  4. Flask從入門到入土(三)——模板

    模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...

  5. Delphi APP 開發入門(四)簡易手電筒

    Delphi APP 開發入門(四)簡易手電筒 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數:32 ...

  6. Delphi APP 開發入門(五)GPS 定位功能

    Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數 ...

  7. Delphi APP 開發入門(十)REST Client 開發

    Delphi APP 開發入門(十)REST Client 開發 分享: Share on facebookShare on twitterShare on google_plusone_share ...

  8. Delphi APP 開發入門(九)拍照與分享

    Delphi APP 開發入門(九)拍照與分享 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數:30 ...

  9. Delphi APP 開發入門(八)SQLite資料庫

    Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次 ...

随机推荐

  1. VS2010修改默认配置路径

    视图->属性管理器 弹出如下截图:

  2. IF EXIST: The syntax of the command is incorrect.

    Batch 脚本中使用 IF EXIST 语句时,总是提示 The syntax of the command is incorrect. 原始 bat 脚本如下: ECHO OFF SET proj ...

  3. IniParse解析类

    说明 iniParse这个类是一个解析ini文件的类,他的功能和Windows下GetPrivateProfileString的功能一样,可以很方便的保存读取配置. 当然他不是只有GetPrivate ...

  4. Struts2配置文件_常量属性_独立测试分析

    <constant name="struts.devMode" value="true" /> 设置开发模式,可以了解详细信息,该属性指定视图标签默 ...

  5. datatable 行列转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. 获取本机IP、mac地址、计算机名

    python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...

  7. ubuntu下php开发环境搭建,nginx+(cgi)php5fpm+memcached+xdebug

    由于只是开发环境,所以都是选择比较简单的apt-get安装方式 ,但中间也遇到一点问题. 首先安装nginx nginx的安装和配置其实很简单,nginx本身非常轻量级, 直接 sudo apt-ge ...

  8. 如何使用KMS激活win10和office

    首先你需要下载一个kms软件,地址: https://yunpan.cn/cRxVNy2LRXjBt (提取码:d5d8) 然后搭建kms服务器,很简单.启动软件,选择“附加”Tab, 点连接到服务器 ...

  9. USB驱动能力有限

    笔者用USB接一个单片机最小系统,再从单片机最小系统引出电源线接一个数字电路模块.当后边两部分的功率较大时,就会引起USB电压的下降,甚至到3V左右.电压的下降就会使单片机或者数字电路部分芯片不能正常 ...

  10. S3C2440触摸屏控制总结

    触摸屏控制原理,其实与ADC读取一个滑动变阻器中间触点电压的原理一样.只不过,读取触摸屏的X.Y方向上的电压需要两次,而且需要设置其工作模式以实现一个ADC读取两个通道的电压. S3C2440的ADC ...