C# ASP.NET MVC将DbContext解析为派生类的问题

C# ASP.NET MVC将DbContext解析为派生类的问题,c#,asp.net,asp.net-core,dependency-injection,asp.net-core-2.0,C#,Asp.net,Asp.net Core,Dependency Injection,Asp.net Core 2.0,我有一个带有Microsoft.Extensions.DependencyInjection的ASP.NET Core 2.0应用程序 我已将上下文ApplicationDbContext添加到Startup.cs文件: 但是,Microsoft.Extensions.DependencyInjection无法将DbContext解析为ApplicationDbContext注册服务 如何将所需的DbContext类注入到服务类中 我可以更改GenericController,但GenericC

我有一个带有Microsoft.Extensions.DependencyInjection的ASP.NET Core 2.0应用程序

我已将上下文ApplicationDbContext添加到Startup.cs文件:

但是,Microsoft.Extensions.DependencyInjection无法将DbContext解析为ApplicationDbContext注册服务

如何将所需的DbContext类注入到服务类中

我可以更改GenericController,但GenericController所在的项目没有对ApplicationDbContext的引用

我正在开发一个中间件,它应该需要DbContext,它应该专门用于其他项目。因此控制器位于中间件中,它没有对专用类的引用

GenericController所在的项目没有对ApplicationDbContext的引用

这是你100%的问题

您需要确保ApplicationDbContext位于使用它的服务可以引用的项目中:

public GenericController(ApplicationDbContext context){
或者,您需要创建一个IApplicationDbContext,该IApplicationDbContext由可从使用它的服务引用的ApplicationDbContext实现:

public GenericController(IApplicationDbContext context){

单独注入DbContext并不能解决这个问题,因为它不会公开应用程序需要使用的任何表。

我通过在AddContext命令下面添加一个从派生类到父类的瞬态来解决这个问题


另一种解决方案是向自定义工厂注册DbContext,该工厂将从容器返回已注册的ApplicationDbContext实例:

services.AddDbContextoptions=>options.UseSqlServerDefaultConnection; services.AddScopeds=>s.GetService;
不幸的是,我正在开发一个中间件,它应该需要一个特定的DbContext,在其他项目中应该是专用的。因此控制器位于中间件中,它没有对专用类的引用。仅适用于父对象。我认为我可以解析子类。如果它没有对具体ApplicationDbContext的引用,那么您需要在中间件程序集和定义ApplicationDbContext的程序集之间共享的程序集中创建一个IAApplicationDBContext接口。
public GenericController(ApplicationDbContext context){
public GenericController(IApplicationDbContext context){
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(DefaultConnection));
services.AddTransient<DIADbContext,ApplicationDbContext>();