簡體   English   中英

使用通用存儲庫的依賴注入

[英]Dependency Injection With Generic Repository

我試圖在我的web api控制器中進行依賴注入(ASP.NET CORE),但是我遇到了問題,因為它有一個包含工作單元的通用存儲庫,還有一個通用的服務層。 這些服務位於不同的類庫中。 存儲庫也是如此。

我正在顯示我的代碼:

    public class AccountController : Controller
   {
     private IAccountService _accountService;

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

服務層(基礎服務):

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

帳戶服務:

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

基礎庫:

  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)
    {} 
}

我認為我的問題是我的網絡API中的啟動配置。

我已經嘗試過了:

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

和:

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

但沒有任何作用...有人可以告訴我什么是我的案件的正確配置?

我想你不需要

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

因為IAccountService應該實現IBaseService<>而AccountService應該實現BaseService<> 所以你不需要解決IBaseService

services.AddScoped<IAccountService, AccountService>();

應該管用

暫無
暫無

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

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