1

NinjectHttpApplicationGlobal.asax에HttpAplication 상속 대체 :Ninject에 NET에서 MVC (3) 및 [를 주입] 특성 구성

public class Global : NinjectHttpApplication 
{ 
    protected override IKernel CreateKernel() 
    { 
     return Bootstrapper.CreateKernel(); 
    } 

    protected override void OnApplicationStarted() 
    { 
     base.OnApplicationStarted(); 
     DependencyResolver.SetResolver(new NinjectDependencyResolver(CreateKernel())); 
     Bootstrapper.Bootstrap(); 
    } 
} 

그리고 내 CreateKernel 방법 :

public static IKernel CreateKernel() 
{ 
    var kernel = new StandardKernel(); 
    kernel.Load(Assembly.GetExecutingAssembly()); 
    return kernel; 
} 

내 RoleService의 [Inject] 속성을 사용하는 속성을 사용해야합니다. RoleProvider는 asp.net에 의해 시작됩니다.

모든

내가 내 Global.asax에에서 NinjectHttpApplication에서 상속 만약 내가 그 라인 필요가 없다는 말 : 방법을 OnApplicationStarted 내에서 DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));을하지만없는 예외가 발생 내 의존성이 NULL입니다 내 RoleProvider 서비스에서.

결국, 그 라인이 필요한가 아닌가? 내가 뭔가 잘못하고 있는거야?

답변

2

DependencyResolver는 시작시 확장 프로그램에 의해 설정됩니다. ApplicationStart 전에 서비스가 작성되면 기본값이 사용됩니다. 귀하의 코드에서 나는 그것이 언제 만들어 지는지 알 수 없습니다. 그러나 일반적으로이 줄은 필수가 아니어야합니다.

또한 NuGet 방식을 사용하여 Ninject를 통합 해 볼 수도 있습니다. 그러면 조금 더 일찍 Ninject Kernel과 DependencyResolver가 시작될 것입니다.

+0

NuGet 방식이란 무엇입니까? 내 응용 프로그램에 새로운 동작이 나타났습니다.이 OnApplicationStarted() 메서드의 "DependencyResolver.SetResolver (...)"행에서 RoleService가 asp.net에 의해 트리거되지 않습니다. 이유가 무엇입니까? –

+1

역할 서비스 및 시작 방법에 대한 정보를 제공하지 않았습니다. 그래서 나는 너를 도울 수 없어. NuGet 정보 : NuGetPackage를 다운로드하면 모든 것이 설정됩니다. 또한 읽으십시오 : https://github.com/ninject/ninject.web.mvc/wiki/Setting-up-an-MVC3-application –

+0

DLL의 TeamCity에서 다운로드했습니다 : Ninject, Ninject.Web.Common 및 Ninject.Web .MVC 버전 2.2.3. NinjectHttpApplication 클래스가 더 이상 존재하지 않습니까? 내 문제는 kernel.Inject (Roles.Provider); –