我正在尝试在我的 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/