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