Рекомендации по настройке контейнера IoC в корне композиции Asp .Net MVC

Я создаю приложение ASP .Net MVC 2 и хочу следовать идеям из книги Марка Симанна » Внедрение зависимостей в .Net ", поэтому я зарегистрировал свою настраиваемую фабрику контроллеров в файле Global.asax, и я настраиваю контейнер в фабрике контроллеров следующим образом:

public IController CreateController(RequestContext context, Type controllerType)  
{  
   var container = new Container();
   object controller;

   if(controllerType == typeof(MyControllerOne)
   {
      container.Configure(r => r.
         For<IService>().
         Use<ServiceOne>());
   }
   else if(controllerType == typeof(MyControllerTwo)
   {
       container.Configure(r => r.
          For<IService>().
          Use<ServiceTwo>());
   }
   ......

   return container.GetInstance(controllerType) as IController;
}

Теперь этот код работает (хотя, возможно, у меня где-то есть ошибка, поскольку я пишу это по памяти), зависимости устраняются и каждый раз создается экземпляр правильного контроллера с правильной зависимостью, но кажется, что для каждого запроса контейнер настраивается для разрешения зависимостей, которые потребуются в данный момент. Итак, мои вопросы:

  • Разве это не лишнее?
  • Разве конфигурация контейнера не должна выполняться в файле Global.asax, чтобы она выполнялась только один раз? Если да, то как это можно было сделать?
  • Каким образом изменится время жизни объекта, настроив контейнер так, как я это делаю? Я имею в виду, что в конечном итоге будут репозитории, которые должны иметь одноэлементное время жизни, некоторые другие должны быть созданы один раз с помощью HTTP-запроса и так далее. Какие могут быть последствия?

Мы будем очень благодарны за любые комментарии, идеи и / или предложения.

Между прочим, контейнер IoC, который я использую, - это StructureMap, хотя я думаю, что для этого конкретного вопроса он может быть не слишком актуальным.

5
задан Sergio Romero 8 November 2011 в 16:05
поделиться