2011-09-19 29 views
0

我有這樣的代碼在我的Ninject的bootstap:無法使用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); 
     } 

編輯:這裏的全部引導程序......但其基本一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

你需要顯示的代碼爲你的「引導程序」還有,你在app_start調用此? – Paul

+0

我仔細查看了調試過程,所有內容都毫無例外地被調用。所以bootstrapper的工作原理和每個人都是。我試圖做的是讓系統提供一個IContext實例,例如MySampleContext .. – Rushino

+0

@RubenBartelink:我沒有Ninject的問題,你是對的。我老實說晚了,只是很累,不應該發表任何評論。 – Paul

回答

3

使用Ninject.MVC3上的NuGet發現和閱讀文檔https://github.com/ninject/ninject.web.mvc/wiki/MVC3

+0

這是我用過的,而這不回答這個問題。問題是關於向方法提供一個IContext實例如MySampleContext .. – Rushino

+0

您沒有正確使用擴展。通過設置DependencyResolver.SetResolver(新的NinjectDependencyResolver(內核));您正在重寫Ninject.MVC3的DependencyResolver,並從那一點開始擴展已損壞。 –

+0

並定義 kernel.Bind ().To ()。InRequestScope();並刪除由綁定確保的Application_BeginRequest,從而爲整個請求獲得相同的實例,因此您不再需要ContextProvider。 –

相關問題