2013-01-07 46 views
3

我是新來的依賴注入,使用C#,所以請原諒我的跛腳問題。無論如何,在投入時間和購買昂貴的書籍之前,我想提出這個問題。依賴注入有多有用?

通過一些在線文檔會後,似乎使用依賴容器與配置文件一起可以使用這個從到另一個類型的實現來SWITH。但是,這可以通過if/else語句和一些配置設置輕鬆完成。

什麼是使用這種繁瑣的實現只是從一個類更改爲另一個優勢?我看到抽象和工廠模式更有用。也許我錯了。

回答

1

地方,我需要依賴注入我哈SA真正WORL情況:

2裝配:1負責計算價格,當你做一個搜索(讓叫它搜索),第二負責計算預訂價格與所有選項(我們稱之爲預訂)。

預訂集已引用搜索(因爲它需要知道最初的價格計算全價)。

但是這裏的要求是:我們需要搜索的價格來包含所有的授權選項(是的,在旅遊行業你有授權選項),比如「全房清潔」。

,所以我不能有一個裁判的預訂中搜索(因爲循環引用)。所以我決定使用依賴注入。

我的搜索組件定義的接口

public interface IAddMandatoryOptionService{ 
    void ChangeResultsWithMandatoryOptions(SearchResult[] results); 
} 

然後我的預訂大會可以實現此接口。

public class AddMandatoryOptionService : IAddMandatoryOptionService{ 
    public void ChangeResultsWithMandatoryOptions(SearchResult[] results){ 
    ... 
    } 
} 

我SearchService類現在看起來像

public class SearchService{ 
    public SearchService(IAddMandatoryOptionService optionService){ 
    this.OptionService = optionService; 
    } 
    public SearchResult[] Search(Filter filter){ 
    ... 
    this.OptionService.ChangeResultsWithMandatoryOptions(results); 
    ... 
    return results; 
    } 
} 

所以我的搜索服務沒有依賴於AddMandatoryOptionService類(和預訂組裝),但它使用的functionality.The好IAddMandatoryOptionService會注射時創建我的服務(在我的Application_Start或與DI框架)

的優點是:

  • 解決循環引用問題。
  • 如果我想對我的SearchService進行單元測試,那麼我將不得不模擬/僞造IAddMandatoryOptionService。

在這裏,注射需要更多的技術比邏輯,但我認爲這種現實世界的情況可以幫助你明白這一點。

1

總之,依賴注入用於能夠losely耦合類。通過使用if else語句,您可以在類之間引入依賴關係。在將新實現添加到if語句時,您需要添加另一個else語句。

你可能已經閱讀http://en.m.wikipedia.org/wiki/Dependency_injection,因爲他們有一個不錯的動力部分。

也許用不同的代碼示例來完成你的q。