依賴注入入門——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 閲讀次 ...
随机推荐
- Shell脚本——DNS自动部署
详细说明查看: (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.conf./var/named)设置实现和解释 #! /bin/bash IP="10.10 ...
- HTML5 的绘图支持- canvas
Canvas HTML5新增了一个canvas元素,它是一张空画布,开发者需要通过JavaScript脚本进行绘制. 在canvas上绘图,经过如下3步 (1) 获取canvas元素对应的DOM对象. ...
- nginx Engine X静态网页服务器介绍
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. 反向代理(Reverse Proxy)方 ...
- python从socket做个websocket的聊天室server
下面的是server端:把IP改成自己的局域网IP: #coding:utf8 import socket,select import SocketServer import hashlib,base ...
- composer的create-project安装php框架laravel for mac教程
通过 Composer 的 create-project 命令安装 Laravel 通过在命令行执行 Composer 的 create-project 命令来安装Laravel: composer ...
- css 浮动 相对定位 绝对定位区别
今天下班在地铁上看了一个样式教学视频,因为最近在学习前端.以前刚毕业的时候,感觉后台才是王道,但最近发现,前端也很重要,比如:自己接一些私单做的时候,自己要根据需求做好界面,才能更加符合客户需求,不然 ...
- Android学习之Image操作及时间日期选择器
一.基础学习 1.ImageView是图片容器,就相当于RadioGroup是RadioButton的容器一样,是View的直接子类. 1: <ImageView 2: android:id=& ...
- Solve Longest Path Problem in linear time
We know that the longest path problem for general case belongs to the NP-hard category, so there is ...
- uva 1400 - "Ray, Pass me the dishes!"
又是一道线段树区间更新的题: #include<cstdio> #include<algorithm> #include<cstring> #define ll l ...
- Central Europe Regional Contest 2012 Problem c: Chemist’s vows
字符串处理的题目: 学习了一下string类的一些用法: 这个代码花的时间很长,其实可以更加优化: 代码: #include<iostream> #include<string> ...