亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

微軟企業庫4.1學習筆記(二十四)Unity依賴注入

系統 1783 0

  企業庫的依賴注入模塊Unity是一個輕量的、可擴展的依賴注入容器,支持構造函數注入、屬性注入、方法調用注入。你可以用它創建企業庫的對象,或者是自定義的對象。但是,Unity模塊和企業庫中的其他模塊有很多的不同點:

  •   你可以在不安裝企業庫的情況下,直接使用Unity模塊的依賴注入功能。
  •   Unity模塊可以通過配置信息來準備容器,也可以在運行的時候在代碼中動態創建依賴關系。
  •   Unity模塊不依賴于企業庫的核心庫和企業庫的配置系統,它用自己內置的方法讀取配置信息,如果需要的話,也可以從企業庫的配置文件中讀取Unity的配置信息。

  Unity模塊具有下面的優點:

  •   提供了簡單的對象創建,尤其是對于有繼承關系的對象和有依賴關系的對象,提供了簡單的代碼實現。
  •   支持抽象需求,允許開發者在運行的時候確定依賴關系,或者是在配置的時候指明依賴關系。
  •   增加了靈活性,通過在容器中延遲組件之間的配置。
  •   具有服務定位的能力,允許客戶端存儲和緩存容器。這在ASP.NET中相當有用,開發者可以將容器持久在ASP.NET的session或者是application中。

  下面將包括一些列的主題,你可以看看Unity是否適合你的應用需求。

  •  常用的解決方案。
  •   示例代碼
  •   Unity的亮點
  •   什么時候使用Unity模塊

  一、常用的解決方案

  Unity模塊可以解決開發者面對的以組件為基礎的開發中遇到的一些問題。現代的商業應用中,有許多用來實現特殊功能的業務對象和組件,還有一些組件可以獨立實現一些功能,例如,日志、驗證、授權、緩存和異常處理。

  成功建立這種類型應用的關鍵,就是完成一個解耦的、松散耦合的設計。松散耦合的應用更靈活,并且更容易維護。同樣,在開發的過程中,他們也很容易測試。你可以偽造那些有強依賴的對象,例如,數據庫連接、網絡連接、ERP連接和富客戶端接口組件,來進行單元測試。

  依賴注入是建立松散耦合應用的主要技術。它提供了一些處理對象之間依賴的方法。例如,一個處理客戶信息的對象,可能會依賴于訪問存儲的對象,驗證信息的對象,和檢查用戶是否具有更新權限的對象。依賴注入技術可以確保客戶類被正確的初始化,加載上面用到的對象,特別在當依賴是抽象的時候。

  下面的模式定義了處理這個過程的架構和開發方法:

  •   Inversion of Control(IOC)pattern。這種模式支持插件式的架構,使得對象可以查詢其他需要的對象。
  •   Dependency Injection(DI)pattern。是一種特殊的IOC模式,是一種以面向接口為基礎的編程技術,可以修改類的行為,但是不是通過修改類的內部實現。開發者使用接口編程,用一個容器在類中注入依賴的對象實例,注入對象實例的方法包括:接口注入,構造函數注入屬性(setter)注入,方法調用注入。
  •   Interception pattern。這種模式引入另一種層次的間接性。在客戶端和真實對象之間放一個對象。在客戶端和真實對象之間有一個代理。客戶端的行為通過代理和真實對象進行交互,以及其他需要交互的對象。

  下面將向大家演示下列功能:

  •   建立Unity容器
  •   獲取指定類型的對象
  •   獲取指定類型和注冊名的對象
  •   獲取一個特殊類型的全部對象
  •   使用BuildUp創建對象,而不是通過容器
  •   為構造函數注入注釋對象
  •   為屬性(setter)注入注釋對象
  •   為方法調用注入注釋對象

  另外,Unity的示例代碼中還包含其他的技術,一個簡單的MVP模式實現,和一個Event Broker服務作為自定義的容器擴展。

  示例代碼

  使用依賴注入框架和反轉控制技術,開發者可以生成自定義類的實例,和依賴其他對象的對象實例。Unity模塊支持這些功能,開發者可以使用容器配置注入、構造函數注入、屬性注入、方法調用注入,創建所有有依賴的對象實例。

  Unity提供了兩個方法,可以在容器中注冊類型和映射關系。

  •   RegisterType,這個方法在容器中注冊一個類型,在適當的時候,容器會創建一個指定類型的實例。可以通過類的attribute或者是調用Resolve方法來實現。創建的對象的生命周期,就是在參數中指定的生命周期。如果你沒有提供生命周期參數,注冊類型的生命周期是短暫的,意味著每次調用Resolve方法的時候,容器都會創建一個新的對象實例。

?

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> using ?System;
using ?Microsoft.Practices?.EnterpriseLibrary.Logging;
using ?Microsoft.Practices.Unity;

namespace ?BeautyCode.ConApp
{
????
public ????? interface ?IMyService
????{}
????
public ? class ?CustomService:IMyService?
????{}
????
/// ? <summary>
????
/// ?Description?of?Class4.
????
/// ? </summary>
???? public ? class ?Class4
????{
????????
public ?Class4()
????????{
????????????IUnityContainer?myContainer
= new ?UnityContainer?();
????????????myContainer.RegisterType?
< IMyService,CustomService > ();
????????????IMyService?myServiceInstance
= myContainer.Resolve? < IMyService? > ();
????????}
????}
}

?

?

  •   RegisterInstance,這個方法在容器中注冊一個已經存在實例的類型,生命周期可以指定。在生命周期里面,容器返回這個已經存在的實例。如果沒有指定生命周期,實例的生命周期由容器控制。

?

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> using ?System;
using ?Microsoft.Practices?.EnterpriseLibrary.Logging;
using ?Microsoft.Practices.Unity;

namespace ?BeautyCode.ConApp
{
????
public ????? interface ?IMyService
????{}
????
public ? class ?CustomService:IMyService?
????{}
????
/// ? <summary>
????
/// ?Description?of?Class4.
????
/// ? </summary>
???? public ? class ?Class4
????{
????????
public ?Class4()
????????{
????????????IUnityContainer?myContainer
= new ?UnityContainer?();
????????????CustomService?customerServ
= new ?CustomService?();
????????????myContainer?.RegisterInstance?
< IMyService? > (customerServ?);
????????????
????????????IMyService?myServiceInstance
= myContainer.Resolve? < IMyService? > ();
????????}
????}
}

?

?

  構造函數注入

  如果開發者使用Unity的Resolve方法初始化的一個類有一個構造函數,構造函數有一個以上的參數,參數的類型是其他的自定義類,Unity容器會自動創建參數中描述的依賴對象。例如下面的CustomService類,依賴于一個LoggingService類。

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ? public ? class ?CustomService:IMyService?
????{
????????
public ?CustomService?(LoggingService?logger)
????????{
????????????logger?.WriteToLog(
" Some?Value " );
????????}
????}

?

  在運行的時候,開發者使用容器的Resolve方法創建一個CustomService的實例,容器也會在CustomService類型范圍內創建一個LoggingService對象實例。

?

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> IUnityContainer?myContainer = new ?UnityContainer?();
????????????CustomService?myInstance
= myContainer?.Resolve? < CustomService?? > ();

?

?

  屬性注入

  除了構造函數注入,Unity還支持屬性注入和方法調用注入。下面將講述屬性注入。一個ProductService類有一個屬性,是一個叫做SupplierData的類,通過在屬性上添加Denpendency特性實現屬性注入。

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> public ? class ?SupplierData
????{
????}
????
public ? class ?ProductData
????{
????????
private ?SupplierData?_supplier;
????????
????????[Dependency?]
????????
public ?SupplierData?Supplier
????????{
????????????
get { return ?_supplier?;}
????????????
set { this ._supplier = var;}
????????}
????}
????

?

?

  現在,使用Unity創建一個ProductData對象實例,會自動創建一個SupplierData類的實例作為ProductData對象的屬性值。

   未完待續。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

微軟企業庫4.1學習筆記(二十四)Unity依賴注入模塊 簡介


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大伊香蕉精品视频在线天堂 | 老师邪恶影院a啦啦啦影院 老师在办公室被躁到白浆 老湿机午夜影院 | 国产黄mmd在线观看免费 | 亚洲第一页色 | 欧美不卡影院 | 国产成人免费高清在线观看 | 国产毛片在线高清视频 | 国产欧美精品一区二区三区四区 | 久久色婷婷 | 国产香蕉在线精彩视频 | 女人用粗大自熨喷水在线视频 | 国产极品粉嫩福利在线观看 | 成人xxx免费视频播放 | 国产精品高清全国免费观看 | 免费黄色毛片视频 | 久久综合九色综合97婷婷女人 | 中文精品北条麻妃中文 | 亚洲国产精品网站久久 | 毛片大| 亚洲黄色网址大全 | 男人的天堂在线免费视频 | 亚洲欧洲一区二区三区在线观看 | 狠狠操狠狠插 | 一级大片免费观看 | 男人天堂网在线观看 | 激情五月婷婷红人馆 | 久久精品中文字幕免费 | 久久免费福利视频 | 视频在线观看入口一二三2021 | 91精品久久久久久久久久小网站 | 非洲一级毛片 | 欧美一级录像 | 欧美毛片aaaaa片久久久久 | 国产免费人视频在线观看免费 | 黄色毛片在线播放 | 亚洲精品图区 | 亚洲精品一区二区三区不卡 | 在线成人欧美 | 福利在线观看视频 | www.黄视频| 久久一本精品久久精品66 |