2016-01-25 104 views
0

我的項目有兩個類庫和一個Web客戶端,他們分別是:A,B和客戶統一資源庫和繼承類庫

enter image description here

當調用Save()方法告訴我的錯誤。

new B().Save("Input"); 

注意:如何在這個類庫中使用Unity。

客戶端調用庫的方法確認()和庫調用庫B方法保存() 文庫B的方法保存在數據庫數據

現在我想在庫B中使用Unity存儲庫容器,但是如何? This文章幫助我理解如何在控制檯應用程序中使用存儲庫,但未能將其應用於我的情況。

回答

0

最佳實踐是在應用程序的頂層註冊依賴注入,如mvc/webapi應用程序。類庫中的任何顯式解析都會打破依賴注入鏈,從而隱藏依賴關係。如果您需要直接在類庫中使用容器,則可能需要重新設計解決方案。

public class MyApiController : ApiController 
{ 
    public MyApiController(IService service) 
    { 
     //clearly MyApiController depends on IService 
    } 
} 

public class MyService : IService 
{ 
    public MyService(IUnityContainer container) 
    { 
     this.Dependency1 = container.Resolve<Dependency1>(); 
     //using container directly breaks the dependency chain 
     //because I can resolve everything here 
     //makes MyService hard to be injected and unit tested 
    } 
} 
+0

Danny Chen,謝謝你的回覆,因爲缺乏我的知識請原諒我。我不明白你是如何做MyService構造函數的依賴的。當我的庫A調用庫B時,這個被調用的進程必須是新的B()。Save()。那麼如何解決B的構造函數依賴。 – shamim

+0

@shamim如果你使用'new B()',你不會以依賴注入的方式進行操作。我建議你閱讀一些指導性文章。您可以通過搜索引擎輕鬆獲取它們。 –

+0

感謝您的回覆,帶出newB()如何調用繼承庫方法。正如我在前面提到的我的問題和圖片。 – shamim