我最近看到这篇文章标题为: Linq to Sql和ASP.NET MVC - DataContext Per Request 在这个链接: http://www.jeremyskinner.co.uk/2010/01/31/linq-to-sql-and-asp-net-mvc-datacontext-per-request/
我想使用ninject而不是structuremap来设置它,最好使用新的mvc 3依赖解析器,因为我正在使用mvc 3 rtm。
文章的相关部分是:
首先,您需要通过调用Global.asax中的ObjectFactory.Configure来配置StructureMap,并传入自定义的Registry实例:
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
ObjectFactory.Configure(cfg => {
cfg.AddRegistry(new MyRegistry());
});
}
MyRegistry的代码如下所示:
public class MyRegistry : Registry {
public MyRegistry() {
For<BlogDataContext>()
.HttpContextScoped()
.Use(c => new BlogDataContext());
Scan(scan => {
scan.AddAllTypesOf<Controller>();
});
}
}
这里我告诉StructureMap为每个HTTP请求创建一个BlogDataContext实例,并使用容器注册每个Controller实例。
接下来,我们需要告诉MVC使用StructureMap来实例化我们的控制器。这可以通过创建自定义ControllerFactory来完成:
public class StructureMapControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
return (IController) ObjectFactory.GetInstance(controllerType);
}
}
然后我们可以用Application_Start中的StructureMapControllerFactory替换DefaultControllerFactory:
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
ObjectFactory.Configure(cfg => {
cfg.AddRegistry(new MyRegistry());
});
ControllerBuilder.Current.SetControllerFactory(
new StructureMapControllerFactory());
}
我想用ninject 2.0而不是结构图做同样的事情。我正在使用ninject mvc3构建一个mvc 3站点。我从nuget下载了ninject mvc 3软件包,我在我的解决方案中有这个文件来处理ninject的连接。 AppStart_NinjectMVC3.cs
我不想使用structurmap,我知道可以使用ninject完成相同的设置,但我不确定如何连接它。
谢谢。
答案 0 :(得分:2)
我宁愿使用https://github.com/ninject/ninject.web.mvc的ninject项目中的官方mvc3扩展名。它附带了一个完整的示例应用程序,展示了如何连接mvc3应用程序。