2016-10-17 4 views
0

Имея планирования неприятности/enqueuing действия MVC с замедленным воспламенением (1.6.5) (Пользовательское IServices работает просто отлично ..)замедленного воспламенение ASP.NET MVC Ядро

Нет сервис для типа '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(); 
    } 
} 
+0

Обратите внимание, что он больше не называется MVC6. Правильное имя - «ASP.NET Core MVC» с версией 1.0 – Tseng

+1

. Здесь гораздо большая проблема, и именно поэтому вы хотели бы использовать контроллер для такого рода вещей? Для начала фоновая задача ничего не вернет. Во-вторых, вы не должны полагаться на контекст контроллера/запроса, чтобы быть доступным вам внутри задач Hangfire. – DavidG

+0

@DavidG Я знаю, что это не оптимально. Я использую MVC для просмотра PDF. Мне нужен ControllerContext для этого. Не знаю другого пути. – Fredde

ответ

3

По умолчанию контроллеры не регистрируются с системой впрыска зависимостей в ASP.NET Core. Вы должны явно вызвать AddControllersAsService, чтобы зарегистрировать их, как описано в this GitHub issue:

Привет,

Может быть, я ошибаюсь, но, как я испытал глубоко (и проверил Mvc исходный код), контроллеры не являются разрешено с IServiceProvider, но только аргументы конструктора из них разрешены с IServiceProvider.

Это что, дизайн? Я очень удивлен. Потому что я использую другую структуру DI, которая поддерживает вложение свойств. И я не могу использовать вложение свойств, поскольку экземпляры контроллера не запрашиваются с IServiceProvider.

Вы добавили AddControllersAsServices в загрузочном (https://github.com/aspnet/Mvc/blob/ab76f743f4ee537939b69bdb9f79bfca35398545/test/WebSites/ControllersFromServicesWebSite/Startup.cs#L37)

Смотрите также this answer предшествующему вопрос для примера и получения более подробной информации.

+0

Спасибо! Это делает меня еще на один шаг. Теперь зависимости между контроллерами не активируются. Алота «Ссылка на объект не установлена ​​на экземпляр объекта». Любые идеи? – Fredde

+0

Мой плохой. HttpContext не активируется. По понятным причинам .. Придется обходиться. – Fredde

Смежные вопросы