C# 通用存储库的依赖注入

C# 通用存储库的依赖注入,c#,generics,dependency-injection,asp.net-core,.net-core,C#,Generics,Dependency Injection,Asp.net Core,.net Core,我试图在我的web api控制器中进行依赖项注入(ASP.NET CORE),但我遇到了问题,因为我有一个带有工作单元的通用存储库,还有一个通用服务层。这些服务位于不同的类库中。存储库也是如此 我正在显示我的代码: public class AccountController : Controller { private IAccountService _accountService; public AccountController(IAccountServic

我试图在我的web api控制器中进行依赖项注入(ASP.NET CORE),但我遇到了问题,因为我有一个带有工作单元的通用存储库,还有一个通用服务层。这些服务位于不同的类库中。存储库也是如此

我正在显示我的代码:

    public class AccountController : Controller
   {
     private IAccountService _accountService;

   public AccountController(IAccountService accountService)
    {
        _accountService = accountService;
    }
   }
服务层(基本服务):

公共类基本服务:IDisposable,IBaseService其中tenty:class
{
专用只读IBaseRepository存储库;
私人只读i工作单元(unitof工作单元);;
公共基础服务(IBaseRepository存储库、IUnitOfWork unitOfWork)
{
_存储库=存储库;
_unitOfWork=unitOfWork;
}
帐户服务:

public class AccountService : BaseService<User>, IAccountService
{
    private readonly IAccountRepository _repository;
    private readonly IUnitOfWork _unitOfWork;

    public AccountService(IAccountRepository repository, IUnitOfWork unitOfWork) : base (repository, unitOfWork)
    {
        _repository = repository;
        _unitOfWork = unitOfWork;
    }
公共类AccountService:BaseService、IAccountService
{
专用只读IAccountRepository\u repository;
私人只读i工作单元(unitof工作单元);;
公共AccountService(IAccountRepository repository,IUnitOfWork unitOfWork):基础(repository,unitOfWork)
{
_存储库=存储库;
_unitOfWork=unitOfWork;
}
基本存储库:

  public class BaseRepository<TEntity> : IDisposable, IBaseRepository<TEntity> where TEntity : class
{
    protected NeoSpaceDbContext _database;

    public BaseRepository(NeoSpaceDbContext database)
    {
        _database = database;
    }
public class AccountRepository : BaseRepository<User>, IAccountRepository
{
    public AccountRepository(NeoSpaceDbContext context) : base(context)
    {} 
}
public class BaseRepository:IDisposable,IBaseRepository其中tenty:class
{
受保护的NeoSpaceDbContext_数据库;
公共BaseRepository(NeoSpaceDbContext数据库)
{
_数据库=数据库;
}
帐户存储库:

  public class BaseRepository<TEntity> : IDisposable, IBaseRepository<TEntity> where TEntity : class
{
    protected NeoSpaceDbContext _database;

    public BaseRepository(NeoSpaceDbContext database)
    {
        _database = database;
    }
public class AccountRepository : BaseRepository<User>, IAccountRepository
{
    public AccountRepository(NeoSpaceDbContext context) : base(context)
    {} 
}
public类AccountRepository:BaseRepository,IAccountRepository
{
公共AccountRepository(NeoSpaceDbContext上下文):基础(上下文)
{} 
}
我认为我的问题在于我的web api中的启动配置

我已经试过:

 services.AddScoped(typeof(IBaseService<User>), typeof(AccountService));
services.addScope(typeof(IBaseService)、typeof(AccountService));
以及:

services.AddScoped(typeof(IBaseService),typeof(BaseService));
services.AddSingleton();
但什么都不管用。。。
有人能告诉我什么是适合我的案例的正确配置吗?

我想你不需要这样做

services.AddScoped(typeof(IBaseService<>), typeof(BaseService<>));

应该有用吧我想你不需要

services.AddScoped(typeof(IBaseService<>), typeof(BaseService<>));

应该可以

你能添加一个标签来描述你使用的DI框架吗?我刚刚看到了这个教程:我不知道他们使用的是什么框架@striplingwarrior从链接的文章中,“ASP.NET核心包括一个简单的内置容器(由iSeries Provider接口表示)默认情况下,它支持构造函数注入,并且ASP.NET通过DI提供某些服务不太复杂,无法处理你想要配置的通用绑定。请考虑使用一个更完整的DI容器。SimuleJuffer-NeCube是流行的选项。Unity是由微软支持的。你的接口看起来像什么?它们只是空的吗?@ Patrick Mcvay,在这个例子中它是空的,但是它们有特定的替代。你可以添加一个标签来描述你使用的DI框架吗?我刚刚看到了这个教程:我不知道他们使用的是什么框架@striplingwarrior从链接的文章中,“ASP.NET核心包括一个简单的内置容器(由IServiceProvider接口表示)默认情况下,它支持构造函数注入,并且ASP.NET通过DI提供某些服务不太复杂,无法处理你想要配置的通用绑定。请考虑使用一个更完整的DI容器。SimuleJuffer-NeCube是流行的选项。Unity是由微软支持的。你的接口看起来像什么?它们只是空的吗?@ Patrick Mcvay,在这个例子中它是空的,但是它们有特定的替代。理论方法