依賴注入入門——Unity(二)
參考博客文章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(二)的更多相关文章
- 依賴注入入門——Unity(一)
參考資料http://blog.csdn.net/m13666368773/article/details/7802126 背景介紹 在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系, ...
- Delphi APP 開發入門(二)Android/iOS設定,Hello World
Delphi APP 開發入門(二)Android/iOS設定,Hello World 分享: Share on facebookShare on twitterShare on google_plu ...
- GOOGLE搜索從入門到精通V4.0
1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...
- Flask從入門到入土(三)——模板
模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...
- Delphi APP 開發入門(四)簡易手電筒
Delphi APP 開發入門(四)簡易手電筒 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:32 ...
- Delphi APP 開發入門(五)GPS 定位功能
Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數 ...
- Delphi APP 開發入門(十)REST Client 開發
Delphi APP 開發入門(十)REST Client 開發 分享: Share on facebookShare on twitterShare on google_plusone_share ...
- Delphi APP 開發入門(九)拍照與分享
Delphi APP 開發入門(九)拍照與分享 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:30 ...
- Delphi APP 開發入門(八)SQLite資料庫
Delphi APP 開發入門(八)SQLite資料庫 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次 ...
随机推荐
- (poj) 1751 Highways
Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has a very poor ...
- Scala - error: not found: value SortedMap
先 IMPORT!!!! scala> import scala.collection._import scala.collection._ scala> SortedMap(" ...
- 【转】PHP网站常见安全漏洞,及相应防范措施总结
---恢复内容开始--- 目前,基于PHP的网站开发已经成为目前网站开发的主流,本文笔者重点从PHP网站攻击与安全防范方面进行探究,旨在减少网站漏洞,希望对大家有所帮助! 一.常见PHP网站安全漏洞 ...
- python的一些学习资料(持续更新中)
Markdown在线编辑器 廖雪峰官方博客[基础入门好资料] python-guide[传说中的巨牛写的] the5fire的技术博客[全职python程序员博客]
- php快递单号查询源码
贴下记录下php查询快递单号的源码,能查询各种快递的快递单号记录,中通.圆通快递.顺丰快递等都不是问题.只需要在 爱快递(www.aikuaidi.cn)上面申请一个快递key即可,下面把源码分享下, ...
- Tasklist 命令的使用
1,根据PID查找进程 tasklist /fi "pid eq 2245" 2,根据名称查找进程 tasklist /fi "imagename eq notepad. ...
- 丢沙包游戏(或杀人游戏)的C语言实现
丢沙包游戏(或杀人游戏)用C语言实现: 游戏简述: 杀人游戏(或者丢沙包游戏),设定一些人(人数为:num)一起玩游戏,从某个指定的人(设定为:start)开始轮流扔沙包,扔沙包人的下一个人为1,每隔 ...
- POJ 1961 Period KMP算法next数组的应用
题目: http://poj.org/problem?id=1961 很好的题,但是不容易理解. 因为当kmp失配时,i = next[i],所以错位部分就是i - next[i],当s[0]...s ...
- qt5 基础知识
QWidget wQLineEdit edit; edit.show(); //如果没有这句,编辑框edit将会显示在父窗口的左上角edit.setParent(&w); //以w为父窗口并显 ...
- iOS Xcode制作模板类-b
为什么要定义模板类 遵守代码规范可以提高代码可读性, 降低后期维护成本. 当我们定下了一个团队都认同的代码规范, 如我们要求所有的viewController的代码都得按照下面来组织: #pragma ...