简体   繁体   English

使用通用存储库的依赖注入

[英]Dependency Injection With Generic Repository

I am trying to do dependency injection (ASP.NET CORE) in my web api controller but I am having problems, since have a generic repository with unit of work, and also a generic service layer. 我试图在我的web api控制器中进行依赖注入(ASP.NET CORE),但是我遇到了问题,因为它有一个包含工作单元的通用存储库,还有一个通用的服务层。 The services are in a different class library. 这些服务位于不同的类库中。 The same occurs for the repositories. 存储库也是如此。

I am displaying my code: 我正在显示我的代码:

    public class AccountController : Controller
   {
     private IAccountService _accountService;

   public AccountController(IAccountService accountService)
    {
        _accountService = accountService;
    }
   }

service layer (base service): 服务层(基础服务):

  public class BaseService<TEntity> : IDisposable, IBaseService<TEntity> where TEntity : class
{
    private readonly IBaseRepository<TEntity> _repository;
    private readonly IUnitOfWork _unitOfWork;

    public BaseService(IBaseRepository<TEntity> repository, IUnitOfWork unitOfWork)
    {
        _repository = repository;
        _unitOfWork = unitOfWork;
    }

account service: 帐户服务:

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;
    }

base repository: 基础库:

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

    public BaseRepository(NeoSpaceDbContext database)
    {
        _database = database;
    }

account repository: 帐户存储库:

public class AccountRepository : BaseRepository<User>, IAccountRepository
{
    public AccountRepository(NeoSpaceDbContext context) : base(context)
    {} 
}

I think my problem is my startup configuration in my web api. 我认为我的问题是我的网络API中的启动配置。

I have already tried: 我已经尝试过了:

 services.AddScoped(typeof(IBaseService<User>), typeof(AccountService));

and: 和:

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

but nothing works ... Can someone tell me what is the right configuration for my case? 但没有任何作用...有人可以告诉我什么是我的案件的正确配置?

I guess you dont need to 我想你不需要

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

because IAccountService should implement IBaseService<> and AccountService should implement BaseService<> . 因为IAccountService应该实现IBaseService<>而AccountService应该实现BaseService<> so you should not need to resolve IBaseService 所以你不需要解决IBaseService

services.AddScoped<IAccountService, AccountService>();

should work 应该管用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM