Ninject, Linq to Sql, запрос объема для каждого контроллера без внедрения - PullRequest
0 голосов
/ 19 января 2011

Недавно я наткнулся на эту статью под названием: 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, но я не уверен, как ее подключить.

Спасибо.

1 Ответ

2 голосов
/ 20 января 2011

Я бы предпочел использовать официальное расширение mvc3 из проекта ninject, расположенного по адресу https://github.com/ninject/ninject.web.mvc.. Оно поставляется с полным примером приложения, показывающим, как подключить приложение mvc3.

...