Недавно я наткнулся на эту статью под названием: 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.
Соответствующая часть статьи такова:
Во-первых, вам нужно настроить StructureMap, вызвавObjectFactory.Configure внутри вашего Global.asax, передавая в пользовательском экземпляре реестра:
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 о создании одного экземпляра моего BlogDataContext для каждого HTTP-запроса, а также о регистрации каждого экземпляра Controller в контейнере.
Далее нам нужно указать MVC использовать StructureMap для создания экземпляров наших контроллеров.Это можно сделать путем создания пользовательского ControllerFactory:
public class StructureMapControllerFactory : DefaultControllerFactory {
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
return (IController) ObjectFactory.GetInstance(controllerType);
}
}
Затем мы можем заменить DefaultControllerFactory на StructureMapControllerFactory в нашем Application_Start:
protected void Application_Start() {
RegisterRoutes(RouteTable.Routes);
ObjectFactory.Configure(cfg => {
cfg.AddRegistry(new MyRegistry());
});
ControllerBuilder.Current.SetControllerFactory(
new StructureMapControllerFactory());
}
Я хотел бы сделать то же самое сninject 2.0, а не структурная карта.Я создаю сайт mvc 3 с помощью njectject mvc3.Я скачал пакет ninject mvc 3 из nuget, и у меня есть этот файл в моем решении, который обрабатывает подключение ninject.AppStart_NinjectMVC3.cs
Я не хочу использовать structurmap, и я знаю, что такую же настройку можно выполнить с помощью ninject, но я не уверен, как ее подключить.
Спасибо.