簡體   English   中英

使用IoC容器時說明“依賴注入與服務位置”

[英]Explain “Dependency Injection vs Service Location” when using IoC containers

Jason依賴注入與服務位置 的回答中:

對:

 public Foo(Bar bar) { this.bar = bar; } 

以下句子是否正確?

將IoC框架用作StructureMap或Unity的意義在於,我們可以做到

  1. 依賴注入

     public Foo(container->GetInstance(IBar)) { this.bar = bar; } 

    比這樣做更好:

  2. 服務定位器

     public Foo(Container container) { this.bar = container->GetInstance(IBar); } 

依賴注入的重點是您可以執行

public Foo(IBar bar) 
{
     this.bar = bar; 
}

並將Foo類與Bar類分離。 然后,您可以使用StructureMap,Unity或20多個依賴注入容器中的任何其他容器來配置要用於每個協定的哪個類或實例(=接口,可以選擇加上名稱),然后讓DI容器解析所有依賴關系。

這樣做是因為它允許您通過模擬類的依賴關系來有效地對類Foo進行單元測試。 您通常不會自己明確注入依賴項。

我認為,如果僅將依賴項注入用作一次性的東西,那么依賴項注入通常效果最好。 也就是說,您可以在應用開始時解析主應用程序服務,包括其所有依賴項,然后在應用程序運行時使用服務對象的初始化網絡。

您避免使用服務定位器(這是您的第二個代碼示例),因為1.它會將您IBar到特定的DI容器,並且2.您IBar的依賴項隱藏了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM