[英]ASP.NET MVC issue resolving DbContext to a Derived class
我确实有一个带有Microsoft.Extensions.DependencyInjection
的 ASP.NET Core 2.0 应用程序。
我将我的 Context 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。 所以控制器在中间件中,它没有对专用类的引用。
GenericController 所在的项目没有对
ApplicationDbContext
引用
这是您问题的 100%。
您要么需要确保ApplicationDbContext
位于使用它的服务可以引用的项目中:
public GenericController(ApplicationDbContext context){
或者您需要创建一个由ApplicationDbContext
实现的IApplicationDbContext
可以从使用它的服务中引用:
public GenericController(IApplicationDbContext context){
单独注入DbContext
不会削减它,因为它不会公开您的应用程序需要使用的任何表。
我通过在AddContext
命令下面添加一个 Transient 从派生类到父类来解决它
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(DefaultConnection));
services.AddTransient<DIADbContext,ApplicationDbContext>();
另一种解决方案是使用自定义工厂注册DbContext
,该工厂将从容器中返回已注册的ApplicationDbContext
实例:
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(DefaultConnection));
services.AddScoped<DbContext, ApplicationDbContext>(s => s.GetService<ApplicationDbContext>());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.