【发布时间】:2017-06-12 13:28:28
【问题描述】:
我正在尝试在我的 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)
{}
}
我认为我的问题是我的 web api 中的启动配置。
我已经试过了:
services.AddScoped(typeof(IBaseService<User>), typeof(AccountService));
和:
services.AddScoped(typeof(IBaseService<>), typeof(BaseService<>));
services.AddSingleton<IAccountService, AccountService>();
但没有任何效果... 谁能告诉我什么是适合我的情况的配置?
【问题讨论】:
-
你能添加一个标签来描述你正在使用的 DI 框架吗?
-
刚看到这个教程:docs.microsoft.com/en-us/aspnet/core/fundamentals/…我不知道他们用的是什么框架@StriplingWarrior
-
来自链接的文章,“ASP.NET Core 包含一个简单的内置容器(由 IServiceProvider 接口表示),默认支持构造函数注入,并且 ASP.NET 通过 DI 使某些服务可用。 "我猜这个“简单的内置容器”不够复杂,无法处理您尝试配置的那种通用绑定。考虑使用功能更全面的 DI 容器。 SimpleInjector 和 Ninject 是流行的选项。 Unity 由 Microsoft 提供支持。
-
你的界面是什么样的。它们只是空的吗?
-
@Patrick Mcvay 在这个例子中是空的,但他们有特定的存储库方法
标签: c# generics dependency-injection asp.net-core .net-core