Где разместить конфигурацию контейнера IoC? - PullRequest
3 голосов
/ 30 июля 2010

Является ли хорошей практикой создание другого проекта в вашем решении только для настройки контейнера и для реестров?Мне интересно, куда я должен поместить конфигурацию контейнера, у меня в настоящее время есть весь код в моем глобальном asax, но он становится грязным, поскольку я добавляю больше реестров и более продвинутые инъекции.

Ответы [ 4 ]

2 голосов
/ 05 августа 2010

В этой статье в качестве примера используется Castle Windsor, но это хороший совет, применимый независимо от того, какой контейнер вы используете.

http://devlicio.us/blogs/krzysztof_kozmic/archive/2010/06/20/how-i-use-inversion-of-control-containers.aspx

2 голосов
/ 30 июля 2010

Я обычно создаю класс Registry в своем веб-проекте, где я связываю все вместе с StructureMap. Смотрите это: http://structuremap.github.com/structuremap/RegistryDSL.htm

Если у вас есть проекты в вашем решении, которые имеют большую собственную конфигурацию, то вы можете захотеть предоставить этим проектам собственный реестр, но на самом деле не регистрируйте его, пока application_start в global.asax.

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

0 голосов
/ 05 августа 2010

Я бы хотел, чтобы у каждого из моих проектов был свой реестр, а конфигурация (которую Джереми называет Bootstrapper) была в вашем главном приложении (Win / Web / Console).Таким образом, можно легко поменять главное приложение, не затрагивая ни один из реестров.

0 голосов
/ 30 июля 2010

Мы разделяем наши классы на наборы, а затем создаем экземпляр корневого класса из Global.asax.Например:

  IPreferredContainerType container = new RootContainerFactory().Container;
  Application["Container"] = container;
  Container = container;

Корневой контейнер может составлять контейнеры для конкретного модуля, что позволяет легко смешивать и сопоставлять.Просто базовая инкапсуляция.

...