5

我已經通過鏈接了:使用依賴注入與.NET核心類庫(.NET標準)

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/dependency-injection

,得知我如何使用依賴注入的Web API。

正如在上面的鏈接中提到的,我可以使用Startup(Startup.cs)類來進行API層內的依賴注入。但是如何實現.NET Core Class Library的依賴注入。以下是我如何添加類庫的截圖。 enter image description here

我的項目結構是

enter image description here

在項目「DataManagement.Repository」我寫了一個類「UserRepository」,並在項目「DataManagement.Repository.Interfaces」寫的接口「IUserRepository」。

在項目「DataManagement.Business」我寫了一個類「的UserManager」

class UserManager 
    { 
     private IUserManager _userManager; 
     public UserManager(IUserManager userManager) 
     { 
      _userManager = userManager; 
     } 
    } 

正如你可以看到,我想實現通過構造函數依賴注入。

但我不確定在.NET Core Class Library(.NET Standard)中啓用依賴注入需要做什麼修改。

回答

8

你不必在你的類庫中做任何事情。只有主應用程序有一個composition root(應用程序生命週期中的最早點,您可以設置您的對象圖)。

這發生在您的ASP.NET Core應用程序的Startup.cs中。你還註冊你的依賴關係:

services.AddScoped<IUserManager,UserManager>(); 

就是這樣。類庫沒有組合根。他們都不應該這樣做,因爲沒有應用程序就不能使用它們,而使用的IoC容器是應用程序的選擇而不是庫的選擇。

然而,您可以通過提供方便的方法來執行此註冊,例如ASP.NET Core或某種模塊系統中常見的AddXxx方法,就像Autofac或Castle Windsor等第三方IoC容器一樣。

+0

正如您在回答中所說的,如果我在'Startup.cs' om asp.net核心應用程序中添加此依賴項,然後將其添加到.NetCore類庫的引用中,我可以使用它? – pejman

+0

是的,如果你一直使用依賴注入(並且永遠不會實例化一個服務'new'),它會起作用 – Tseng

+0

我在'http://stackoverflow.com/questions/41342064/using-ihostingenvironment- in-netcore-library' plz給我幫助,如果你可以。謝謝 – pejman

相關問題