c# - 通用存储库的依赖注入(inject)

标签 c# generics dependency-injection asp.net-core .net-core

我正在尝试在我的 Web API Controller 中进行依赖注入(inject) (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)
    {} 
}

我认为我的问题是我在 web 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>();

应该工作

关于c# - 通用存储库的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41884255/

相关文章:

dependency-injection - Dagger:代码生成还是反射?

unit-testing - symfony2 使用自定义验证器进行单元测试验证

c# - SharePoint 网络服务 : Need to fetch list in a sub-site

c# - XmlSerializer 在 .Net 5 升级时中断

java - 使用枚举参数自动推断返回类型

Java 泛型 - 从 "capture#1 of ?"到 "A"的未经检查的强制转换

swift - 我可以使用内部泛型进行快速扩展吗?

spring - 如何在 Spock 测试中将 @Value 注释与 Spring PropertyPlaceholderConfigurer 一起使用?

c# - 是否可以确定 COM 互操作类型中可选参数的默认值?

c# - 如何使用户控件像窗口一样在屏幕上可拖动