熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET MVC 4框架揭秘:從Unity來認識IoC(1)[1]

2013-11-13 12:31:15  來源: .NET編程 

    IoC的應用

  所謂控制反轉(Inversion of ControlIoC)簡單地說就是應用本身不負責依賴對象的創建和維護而交給一個外部容器來負責這樣控制權就由應用轉移到了外部IoC容器控制權就實現了所謂的反轉比如在類型A中需要使用類型B的實例而B實例的創建並不由A來負責而是通過外部容器來創建通過IoC的方式實現針對目標Controller的激活具有重要的意義

    從Unity來認識IoC(

  有時又將IoC稱為依賴注入(Dependency InjectionDI)所謂依賴注入就是由外部容器在運行時動態地將依賴的對象注入到組件之中Martin Fowler在那篇著名的文章Inversion of Control Containers and the Dependency Injection pattern中將具體的依賴注入劃分為三種形式即構造器注入屬性(設置)注入和接口注入而我個人習慣將其劃分為一種(類型)匹配和三種注入

  類型匹配(Type Mapping)雖然我們通過接口(或者抽象類)來進行服務調用但是服務本身還是實現在某個具體的服務類型中這就需要某個類型注冊機制來解決服務接口和服務類型之間的匹配關系

  構造器注入(Constructor Injection)IoC容器會智能地選擇和調用適合的構造函數以創建依賴的對象如果被選擇的構造函數具有相應的參數IoC容器在調用構造函數之前解析注冊的依賴關系並自行獲得相應參數對象

  屬性注入(Property Injection)如果需要使用到被依賴對象的某個屬性在被依賴對象被創建之後IoC容器會自動初始化該屬性

  方法注入(Method Injection)如果被依賴對象需要調用某個方法進行相應的初始化在該對象創建之後IoC容器會自動調用該方法

  開源社區具有很有流行的IoC框架如Castle WindsorUnitySpringNETStructureMap和Ninject等Unity是微軟Patterns& Practices部門開發的一個輕量級的IoC框架該項目在Codeplex上的地址為http://unitycodeplexcom/我們可以下載相應的安裝包和開發文檔在本書出版之時Unity的最新版本為出於篇幅的限制我們不可能對Unity進行詳細的討論但是為了讓讀者了解IoC在Unity中的實現我們寫了一個簡單的程序

  創建一個控制台程序定義如下幾個接口(IAIBIC和ID)和它們各自的實現類(ABCD)在類型A中定義了BC和D個屬性其類型分別為接口IBIC和ID屬性B在函數中被初始化意味著它會以構造器注入的方式被初始化屬性C上應用了MicrosoftPracticesUnityDependencyAttribute特性意味著這是一個需要以屬性注入方式被初始化的依賴屬性屬性D則通過方法Initialize初始化該方法上應用了特性MicrosoftPracticesUnityInjectionMethodAttribute意味著這是一個注入方法它會在A對象被IoC容器創建的時候會被自動調用

  namespace UnityDemo

  {

  public interface IA { }

  public interface IB { }

  public interface IC { }

  public interface ID {}

  public class A : IA

  {

  public IB B { get; set; }

  [Dependency]

  public IC C { get; set; }

  public ID D { get; set; }

  public A(IB b)

  {

  thisB = b;

  }

  [InjectionMethod]

  public void Initialize(ID d)

  {

  thisD = d;

  }

  }

  public class B: IB{}

  public class C: IC{}

  public class D: ID{}

  }

  然後為該應用添加一個配置文件並定義如下一段關於Unity的配置這段配置定義了一個名稱為defaultContainer的Unity容器並在其中完成了上面定義的接口和對應實現類之間映射的類型匹配

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/16077.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.