簡體   English   中英

具有通用接口和簡單注入器的依賴注入

[英]Dependency Injection with Generic Interface and Simple Injector

我正在嘗試使用 Simple Injector 和 ASP.NET Core 實現依賴注入。 我有一個用於服務的類庫和另一個用於使用存儲庫進行數據訪問的類庫。 我的問題是,我已經在我的啟動類(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
{}

您的問題歸結為以下簡單問題:

我們應該在哪里組合對象圖?

這個問題的答案是:

盡可能靠近應用程序的入口點。

此入口點通常稱為Composition Root

換句話說,您的所有依賴項都應該在 Composition Root 中進行連接,而與它們所在的層無關。 你的作文根是在它自己的一個層,它知道在系統的每個另一部分(如解釋在這里)。

因此,考慮到顯示的代碼,您的 Composition Root 可能如下所示:

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

長話短說,庫沒有 Composition Root 並且您沒有在庫本身中連接依賴項。 您僅在啟動項目中組合所有對象圖。

暫無
暫無

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

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