2011-09-19 5 views
0

이 코드는 Ninject의 부트 스탭에 있습니다 :DependencyResolver를 ninject와 함께 사용할 수 없습니까?

private static IKernel CreateKernel() 
{ 
    var kernel = new StandardKernel(); 
    RegisterServices(kernel); 
    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
    return kernel; 
} 

private static void RegisterServices(IKernel kernel) 
{ 
    //TODO: Enregistrer les services ici.. pour ninject! 
    kernel.Bind<IContext>().To<MySampleContext>(); 
    kernel.Bind<ISampleService>().To<SampleService>(); 
} 

내 전역에서 이것을 시도해보십시오.

 protected virtual void Application_BeginRequest() 
     { 
      ContextProvider cp = new ContextProvider(); 
      DbContext context = (DbContext)DependencyResolver.Current.GetService<IContext>(); 
      cp.SetCurrent(context); 
     } 

EDIT : 여기서 전체 부트 스트 래퍼 ... 그러나 기본적인 것 ninjectt와 함께.

public static class NinjectMVC3 
{ 
    private static readonly Bootstrapper bootstrapper = new Bootstrapper(); 

    public static void Start() 
    { 
     DynamicModuleUtility.RegisterModule(typeof(OnePerRequestModule)); 
     DynamicModuleUtility.RegisterModule(typeof(HttpApplicationInitializationModule)); 
     bootstrapper.Initialize(CreateKernel); 
    } 

    public static void Stop() 
    { 
     bootstrapper.ShutDown(); 
    } 

    private static IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     RegisterServices(kernel); 
     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
     return kernel; 
    } 

    private static void RegisterServices(IKernel kernel) 
    { 
     //TODO: Enregistrer les services ici.. pour ninject! 
     kernel.Bind<IContext>().To<MySampleContext>(); 
     kernel.Bind<ISampleService>().To<SampleService>(); 
    }   
} 

하지만 NULL을 반환합니까? 왜 ?

+0

당신은, 또한 당신의 "부트 스트 래퍼"에 대한 코드를 표시하는 데 필요한 문서를 읽어? – Paul

+0

Ive는 디버깅을 통해 보았고 모든 것이 예외없이 호출되었습니다. 그래서 부트 스트 래퍼가 작동합니다. 내가하려고하는 것은 시스템이 MySampleContext와 같은 IContext 인스턴스를 공급자에게 제공하도록하는 것이다. – Rushino

+0

@RubenBartelink : 나는 Ninject에 문제가 없으며 당신이 옳다. 나는 솔직히 늦게까지 피곤하고, 어떤 말도하지 말았어야했다. – Paul

답변

3

사용 Ninject.MVC3는 NuGet에서 발견하고 app_start에이를 호출 https://github.com/ninject/ninject.web.mvc/wiki/MVC3

+0

그게 내가 사용 하고이 나던은 질문에 대답. 질문은 메서드에 MySampleContext와 같은 IContext 인스턴스를 제공하는 것입니다. – Rushino

+0

확장 프로그램을 올바르게 사용하고 있지 않습니다. DependencyResolver.SetResolver (새로운 NinjectDependencyResolver (kernel))를 설정합니다. 당신은 Ninject.MVC3의 DependencyResolver를 오버라이드하고 있으며 그 시점에서 확장이 깨졌습니다. –

+0

커널을 정의하십시오 .Bind () .To (). InRequestScope(); Application_BeginRequest를 제거하면 전체 요청에 대해 동일한 인스턴스를 얻는 바인딩에 의해 보장되므로 ContextProvider가 더 이상 필요하지 않게됩니다. –

관련 문제