我正在尝试使用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
{}
答案 0 :(得分:1)
您的问题可归结为以下简单问题:
我们应该在哪里构建对象图?
这个问题的答案是:
尽可能接近应用程序的入口点。
此入口点通常称为Composition Root。
换句话说,所有您的依赖项应该在组合根中连接,而与它们所在的层无关。您的组合根本身就是一个层,它知道系统的每个其他部分(如here所述)。
因此,考虑到显示的代码,您的Composition Root可能如下所示:
container.Register<IAccountService, AccountService>();
container.Register<IAccountRepository, AccountRepository>();
container.Register<IUnitOfWork, UnitOfWork>(Lifestyle.Scoped);
简而言之,库没有组合根,并且您没有在库本身中连接依赖项。您只在启动项目中编写所有对象图。