Asp.net mvc 3 用Ninject解析IContext?

Asp.net mvc 3 用Ninject解析IContext?,asp.net-mvc-3,ninject,Asp.net Mvc 3,Ninject,在这段代码中,我尝试用Ninject解析IContext。我有一个ContextProvider,它提供MySampleContext继承的DBContext protected virtual void Application_BeginRequest() { ContextProvider cp = new ContextProvider(); cp.SetCurrent(new MySampleContext()); } 还是我这样做会更好?问题是我无法访问内核,因为

在这段代码中,我尝试用Ninject解析IContext。我有一个ContextProvider,它提供MySampleContext继承的DBContext

protected virtual void Application_BeginRequest()
{
     ContextProvider cp = new ContextProvider();
     cp.SetCurrent(new MySampleContext());
}
还是我这样做会更好?问题是我无法访问内核,因为它是在引导中创建的


有什么想法吗?我想做的是使用ninject提供一个上下文,而不是实例化mySampleContext

,如果您建议这两种解决方案的话。如果您使用的是ASP.NET MVC 3,则可能会使用DependencyResolver

DepencyResolver.Current.GetService<IContext>();
在启动程序中初始化内核

var kernel = new StandardKernel();
// Bindings here...
MvcApplication.CurrentKernel = kernel;
如果由于内核尚未在BeginRequest中引导而出现问题,我建议您处理以下事件,而不是BeginRequest

Application_PreRequestHandlerExecute

希望能有所帮助。

让IDependencyResolver支持DI并将您的应用程序与您正在使用的IoC分离的整个要点。如果您必须重构代码以使用不同的IoC(例如Structuremap),那么您就不会在整个代码中都依赖Ninject

如果无法使用构造函数注入,则需要调用System.Web.Mvc中的静态DependencyResolver,如下所示:

var context = DependencyResolver.Current.GetService<IContext>();

var context=DependencyResolver.Current.GetService();

在请求范围内绑定您的上下文,并在需要时将其注入构造函数。这样,它只有在某处使用时才会被创建

Bind<DbContext>().To<MySampleContext>().InRequestScope();

这:
var context=DependencyResolver.Current.GetService()就是一个例子。它的工作方式是使用Ninject
Bind().To()注册接口和具体实现
然后像上面那样调用DependencyResolver.DependencyResolver.Current.GetService();返回空。。不知道我做错了什么。。我设置了解析器。。在引导程序中,但仍然不起作用。您将不得不显示更多代码。您是如何设置引导程序的?启动程序是否在应用程序启动时被调用?您是否通过NuGet安装了Ninject?如果是,您是否安装了Ninject.MVC3?包?拥有依赖项解析器的目的是为应用程序提供适当的依赖项注入,而不是拥有服务定位器。几乎没有任何情况下,如果没有服务位置,您无法解决问题。
Bind<DbContext>().To<MySampleContext>().InRequestScope();
.OnActivation(i => new ContextProvider().SetCurrent(i))