在使用Hangfire (1.6.5)调度/排队MVC操作时遇到问题(自定义IServices工作得很好.)
没有注册“Controllers.MyController”类型的服务。
public class MyController : Controller
{
public IActionResult RenderViewToString()
{
return View();
}
public IActionResult Test()
{
//Attempt 1
Hangfire.BackgroundJob.Enqueue<MyController>(c => c.RenderViewToString());
//Attempt 2
Hangfire.BackgroundJob.Enqueue(() => c.RenderViewToString());
return new EmptyResult();
}
}发布于 2016-10-17 14:33:37
默认情况下,控制器不会在ASP.NET核心中的依赖注入系统中注册。您需要显式调用AddControllersAsService来注册它们,正如在这个GitHub问题中所解释的那样
嗨, 也许我错了,但当我深入测试(并检查了Mvc源代码)时,控制器并不是从
IServiceProvider解析的,而是只从IServiceProvider解析了它们的构造函数参数。 这是故意的吗?我很惊讶。因为,我使用的是支持属性注入的不同的DI框架。而且我不能使用属性注入,因为Controller实例不是从IServiceProvider请求的。您在启动时添加了AddControllersAsServices(https://github.com/aspnet/Mvc/blob/ab76f743f4ee537939b69bdb9f79bfca35398545/test/WebSites/ControllersFromServicesWebSite/Startup.cs#L37)吗?
有关示例和更多细节,请参见这个答案中的相关问题。
https://stackoverflow.com/questions/40088964
复制相似问题