2017-01-31 72 views
2

我想用簡單噴油器和ASP.NET核心實現依賴注入。我有一個用於服務的類庫和另一個用於與存儲庫進行數據訪問的類庫。我的問題是,我已經在我的啓動類(web api)中實現了依賴注入來引用我的服務。現在我需要在服務中對注入庫的注入依賴做同樣的事情。但我的類庫(服務類庫)中沒有啓動類,所以我該怎麼做?通用接口和簡單噴油器的依賴注入

public interface IBaseService<TEntity> where TEntity : class 
    { } 

賬戶服務

public interface IAccountService : IBaseService<User> 
{ } 


private readonly IAccountRepository _repository; 
    private readonly IUnitOfWork _unitOfWork; 

    public AccountService(IAccountRepository repository, IUnitOfWork unitOfWork) : base (repository, unitOfWork) 
    { 
     _repository = repository; 
     _unitOfWork = unitOfWork; 
    } 

庫(在不同的類庫):

public interface IBaseRepository<TEntity> where TEntity : class 
{} 

回答

1

你的問題可以歸結爲以下幾個簡單的問題:

凡應我們組成對象圖?

回答這個問題是:

儘可能接近到應用程序的入口點。

該入口點通常被稱爲Composition Root

換句話說,所有你的依賴,應在成分根進行佈線,獨立於哪一層他們生活。您的Composition Root根本是一層,它知道系統的每個其他部分(如解釋here)。

因此,考慮所顯示的代碼,你的作文根看起來可能如下:

container.Register<IAccountService, AccountService>(); 
container.Register<IAccountRepository, AccountRepository>(); 
container.Register<IUnitOfWork, UnitOfWork>(Lifestyle.Scoped); 

長話短說,圖書館沒有構成根,你在圖書館本身不依賴線。您僅在啓動項目中組成所有對象圖。