试图澄清我的问题
我有一个ASP.NET 5 Web Api应用程序。我正在尝试创建一个使用自定义基本控制器的控制器类。一旦我将构造函数添加到基本控制器,MVC就无法再找到Get()
类中定义的Generic
端点。
这有效:
当我导航到/api/person
时,Get()
类中定义的Generic
终点被触发
通用:
public class Generic
{
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
PersonController
[Route("api/[controller]")]
public class PersonController : Generic
{
}
这不起作用
当我导航到/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" };
}
}
PersonController
[Route("api/[controller]")]
public class PersonController : Generic
{
public PersonController(DbContext context) : base(context) { }
}
这是一个错误还是我做错了什么?
答案 0 :(得分:2)
您的问题与从其他基类继承无关。我认为问题是,DbContext
的正确实现没有被注入到构造函数中。由于asp.net 5是如此模块化/依赖注入,您需要明确配置它。
在Startup.cs类的ConfigureServices
方法中,注册您的DbContext
服务,以便MVC使用它并在需要时将其注入您的类控制器。
public void ConfigureServices(IServiceCollection services)
{
services.AddEntityFramework()
.AddDbContext<DbContext>();
services.AddMvc();
}