C# 带有自定义基本控制器的控制器不工作 更新
试图澄清我的问题C# 带有自定义基本控制器的控制器不工作 更新,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,试图澄清我的问题 我有一个ASP.NET5WebAPI应用程序。我正在尝试创建一个控制器类,该类使用自定义基控制器。一旦我向基本控制器添加构造函数,MVC就无法再找到Generic类中定义的Get()端点 public class Generic { protected DbContext Context { get; set; } public Generic(DbContext context) { Context = context; }
我有一个ASP.NET5WebAPI应用程序。我正在尝试创建一个控制器类,该类使用自定义基控制器。一旦我向基本控制器添加构造函数,MVC就无法再找到
Generic
类中定义的Get()
端点
public class Generic
{
protected DbContext Context { get; set; }
public Generic(DbContext context)
{
Context = context;
}
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
这是有效的:
当我导航到/api/person
时,就会触发Generic
类中定义的Get()
端点
通用:
public class Generic
{
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
这不起作用 当我导航到
/api/person
时,不会触发Get()
端点。唯一添加的是Generic
类和PersonController
类中的构造函数
public class Generic
{
protected DbContext Context { get; set; }
public Generic(DbContext context)
{
Context = context;
}
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
这是一个bug还是我做错了什么?您的问题与从另一个基类继承无关。我认为问题在于,没有将
DbContext
的正确实现注入构造函数。由于asp.net 5是如此模块化/依赖项可注入,因此需要显式配置它
在Startup.cs类中的ConfigureServices
方法中,注册DbContext
服务,以便MVC使用该服务,并在需要时将其注入类控制器
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddDbContext<DbContext>();
services.AddMvc();
}
public void配置服务(IServiceCollection服务)
{
services.AddEntityFramework()
.AddDbContext();
services.AddMvc();
}
您所说的“这不起作用”和“无法再找到”是什么意思?您使用依赖项注入吗?如果是,可以显示寄存器吗?您的CustomBase
必须从控制器继承。。。如果你有,你应该阅读并创建一个。显示您得到的确切错误以及您为解决该错误所做的研究。如果添加无参数构造函数,那么默认控制器工厂确实无法再实例化控制器,您可以使用依赖项注入或引入自己的控制器工厂来解决这个问题。所有这些都在前面介绍过,所以请尝试搜索不起作用的@CodeCaster。另外,它是ASP.NET5。您无需添加基本控制器类。但即使我添加了它,我仍然无法调用我的Get()
端点。再者,当我从PersonController
和我的Generic
类中删除构造函数时,它确实起作用了。你说得对,我错过了。无论如何,我其余的评论仍然有效。您必须指示MVC将上下文注入控制器构造函数。
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddDbContext<DbContext>();
services.AddMvc();
}