2011-09-19 25 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。 –

相关问题