2014-04-01 2 views
2

먼저이 솔루션을 막아내는 문제에 직면하고 있지만이 문제를 둘러싼 수많은 검색 결과와 Google 검색에 대해 말씀 드리고자합니다. 대답 here 가야 할 것 같습니다. (kernel.Inject(Roles.Provider);)Ninject로 RoleProvider 주입

난 데 문제는 내가 RoleProviderRoles.Provider를 주입려고 할 때하는 것은 그러나 내 사용자 지정 공급자가 Roles.Providers 내 목록에서 발견되는, null 인 것입니다. Ninject가 역할 제공 업체에 너무 빨리 액세스하려고하고 있다고 생각합니다.

NinjectWebCommon 클래스에서는 WebActivator을 사용하여 시작하는 것으로 보입니다. [assembly: WebActivator.PreApplicationStartMethod(typeof(Admin.App_Start.NinjectWebCommon), "Start")]

필자가 만났던 모든 기사는 이전 버전의 Ninject를 사용하고 있으며 Global.asax Application_Start ...에서 무거운 작업을 많이하고있는 것으로 보입니다. 구현을 사용하면 어떻게 DI 작업을 할 수 있습니까? 사용자 지정 역할 공급자의 경우?

사용자 지정 공급자 내에서 [Inject] 특성을 사용하고 있습니다.

답변

1

파이프 라인은 표준 ASP.NET 스택이 만들어지기 전에 실행됩니다. 즉, 부트 스트랩 중 ASP.NET에서 생성 한 내용에 액세스 할 수 없게됩니다 (NinjectWebCommon).

해당 파일은 이 ASP.NET 관련 항목 인에 의존하지 않는 바인딩을 선언하는 데에만 사용하십시오. 이 문제를 해결하려면 Roles.Provider과 같은 ASP.NET 항목에 의존하는 추가 모듈/바인딩을로드하려면 Global.asaxApplication_Start 처리기를 사용해야합니다.

public void Application_Start() 
{ 
    var kernel = (new Bootstrapper()).Kernel; 
    kernel.Inject(Roles.Provider); 

    //Other initialization stuff 
} 

Bootstrapper 클래스는 당신의 NinjectWebCommon.cs 내에서 초기화 된 정적 IKernel을 가진 게으른 싱글입니다 : 여기

가 문제를 해결할 수 있습니다 제안합니다. 따라서 구성된 커널 인스턴스를 외부에서 NinjectWebCommon 외부로 가져 오는 올바른 방법입니다.

사용해보기.

관련 문제