2016-10-17 9 views
0

데 문제가 스케줄링/Hangfire과 MVC 작업을 대기열에 (1.6.5) 가 (사용자 IServices가 잘 작동하지 않습니다 ..)Hangfire 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이라고 부르지 않습니다. 올바른 이름은 버전 1.0의 "ASP.NET Core MVC"입니다. – Tseng

+1

여기에는 훨씬 더 큰 문제가 있습니다. 이러한 이유로 컨트롤러를 사용하려는 이유가 무엇입니까? 시작을 위해 백그라운드 작업은 아무것도 반환하지 않습니다. 둘째, 컨트롤러/요청 컨텍스트를 사용하여 Hangfire 작업 내에서 사용할 수 없도록해야합니다. – DavidG

+0

@DavidG 이것이 최적이 아니라는 것을 알고 있습니다. MVC를 사용하여 뷰를 PDF로 렌더링합니다. 그 때문에 ControllerContext가 필요합니다. 다른 방법은 알지 못합니다. – Fredde

답변

3

이 컨트롤러는 ASP.NET 코어 의존성 주입 시스템에 등록되는 것은 아니다.

안녕,

어쩌면 내가 틀렸다하지만 깊이 테스트 (및 MVC 소스 코드를 확인)로, 컨트롤러가없는을 : this GitHub issue에 설명 된대로 당신은 명시 적으로 등록 AddControllersAsService를 호출해야 IServiceProvider에서 해결되었지만 그 중 생성자 인수는 IServiceProvider에서 해결됩니다. 그게 의도적으로 설계된 것입니까?

? 나는 아주 놀랐다. 왜냐하면, 저는 속성 주입을 지원하는 다른 DI 프레임 워크를 사용하고 있습니다. 컨트롤러 인스턴스는 IServiceProvider에서 요청되지 않으므로 속성 주입을 사용할 수 없습니다.

는 예 및 자세한 내용은 관련 질문에 대한 시작 ( https://github.com/aspnet/Mvc/blob/ab76f743f4ee537939b69bdb9f79bfca35398545/test/WebSites/ControllersFromServicesWebSite/Startup.cs#L37)

도 참조 this answerAddControllersAsServices을 추가했습니다.

+0

감사합니다! 그게 한 걸음 더 나아 갔어. 이제 컨트롤러 종속성이 활성화되지 않는 것처럼 보입니다. "객체 참조가 객체 인스턴스로 설정되지 않았습니다"라는 많은 아이디어가 있습니까? – Fredde

+0

제 잘못입니다. HttpContext가 활성화되지 않습니다. 분명한 이유가 있습니다. 그 문제를 해결해야합니다. – Fredde

관련 문제