我有一个带有Microsoft.Extensions.DependencyInjection
的ASP.NET Core 2.0应用程序。
我将我的上下文ApplicationDbContext
添加到Startup.cs
文件中:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(DefaultConnection));
我的ApplicationDbContext
继承了DbContext
类:
在通用控制器中,我需要DbContext
类:
public GenericController(DbContext context){
但是Microsoft.Extensions.DependencyInjection
无法解析DbContext
到ApplicationDbContext
注册的服务。
如何将所需的DbContext
类注入我的服务类?
我可以更改GenericController
,但GenericController
所在的项目没有引用ApplicationDbContext
。
我正在开发一个中间件,它应该需要专门用于其他项目的DbContext。所以控制器在中间件中,它没有对专用类的引用。
答案 0 :(得分:2)
GenericController所在的项目没有引用
ApplicationDbContext
这是你问题的100%。
您需要确保ApplicationDbContext
在项目中,使用它的服务可以引用:
public GenericController(ApplicationDbContext context){
或者你需要创建一个由IApplicationDbContext
实现的ApplicationDbContext
,可以从使用它的服务中引用它:
public GenericController(IApplicationDbContext context){
单独注入DbContext
不会削减它,因为它不会暴露您的应用程序需要使用的任何表。
答案 1 :(得分:1)
另一种解决方案可以是将DbContext
注册到自定义工厂,该工厂将从容器中返回已经注册的ApplicationDbContext
实例:
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(DefaultConnection));
services.AddScoped<DbContext, ApplicationDbContext>(s => s.GetService<ApplicationDbContext>());
答案 2 :(得分:0)
我通过在AddContext
命令下面将派生类的Transient添加到父类来解决它
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(DefaultConnection));
services.AddTransient<DIADbContext,ApplicationDbContext>();