繁体   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