2014-12-10 2 views
2

전 아침 동안이 문제를 해결하려고했지만 조언을 구할 시간이있는 것으로 보입니다.Ninject가 Application_Start의 DependencyResolver를 통해 해결되지 않음

MVC/WebApi/SignalR 애플리케이션이 있습니다. 웹 응용 프로그램과 함께 시작하고 싶은 서비스가 있습니다. 그리고이 서비스를 주입하고 싶습니다.

public static class NinjectWebCommon 
{ 
    ... 

    private static void RegisterServices(IKernel kernel) 
    { 
     GlobalHost.DependencyResolver = new Microsoft.AspNet.SignalR.Ninject.NinjectDependencyResolver(kernel); 

     kernel.Bind<PricingService>().ToSelf().InSingletonScope(); 
    } 
} 

public class Application : HttpApplication 
{ 
    protected void Application_Start() 
    { 
     ... 
     PricingService pricingService = DependencyResolver.Current.GetService<PricingService>(); 
    } 
} 

내 문제가 pricingService 변수가 null이다 : 그래서 이것은 내가 뭘하려고 오전입니다.

this post에 따르면이 패턴은 작동하지만 그렇지 않습니다. SignalR 의존성 해석자의 영향이 있을지 모르지만, 나는 정말로 확신하지 못합니다.

동시에 WebApi 컨트롤러 내에 생성자 삽입을 사용하면 주입이 제대로 작동합니다.

public class MyController : ApiController 
{ 
    private readonly PricingService _pricingService; 

    public MyController (PricingService pricingService) 
    { 
     _pricingService = pricingService; 
    } 
} 

도움을 주시면 매우 감사하겠습니다.

+1

Application_Start의 DependencyResolver.Current가 NinjectDependencyResolver의 인스턴스인지 확인하십시오. 그렇지 않은 경우 응용 프로그램 시작 프로세스에서 적절한 위치/시간에 구성을 얻었는지 확인하십시오. –

+0

스티브, 신속한 답변을 주셔서 감사합니다. DependencyResolver.Current는 NinjectDependencyResolver의 인스턴스가 아닙니다. 초기화에 대해서는 리졸버를 직접 등록하지 않습니다. 나는 Ninject.MVC3 패키지를 사용하고 있는데 이것이 자동으로 (어딘가에) 이루어질 것이라는 인상을 받았다. Application_Start 전에 NinjectWebCommon 클래스의 RegisterServices 메서드가 호출되는지 확인했습니다. 추가 초기화를 수동으로 수행해야합니까? – user1921819

답변

2

스티브의 의견 덕분에 문제를 해결할 수있었습니다.

MVC 인프라에 NinjectDependencyResolver을 registiring되고 누락 된 부분 :

private static void RegisterServices(IKernel kernel) 
{ 
    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
    ... 
} 

그래서 NinjectDependencyResolver 변경 DependencyResolver.Current의 인스턴스를 수행 한 후.

불행히도 이것은 끝이 아니 었습니다. 을 호출 할 때 System.EntryPointNotFoundException이 있습니다. 그러나 이것은 this discussion의 도움으로 쉽게 해결되었습니다.

관련 문제