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();
}