2010-12-29 3 views
0

В трехслойном приложении Windows, где я буду размещать свой файл конфигурации, который будет содержать единую конфигурацию? Если это в переднем слое, то мне нужно ссылаться на файлы unity.dll во всех моих проектах на переднем, деловом и уровне данных для проектов, чтобы распознавать интерфейсы IUnityContainer и т. Д.?Где я могу разместить файл конфигурации Unity?

Где загрузить контейнер конфигурации? Будет ли это в основном методе основного уровня или слое данных или я загружу контейнер по мере необходимости?

Если все размещено в переднем слое, то это не весь проект, зависящий от переднего слоя, и если я сменил передний слой с Windows App на веб-приложение, тогда мне нужно снова выполнить работу по объединению!

+0

Это как минимум три разных вопроса. –

ответ

8

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

Таким образом, вы загрузите свое приложение в Main, используя Unity, и после этого Unity выполняется. Не позволяйте Unity прикоснуться к любой другой части вашего приложения.

Вот выработка на эту тему: How I use Inversion of Control containers и последующие Pulling from the container.

Если все расположено в переднем слое, тогда не весь проект зависит от переднего слоя, и если я изменю передний слой от приложения Windows к веб-приложению, тогда я должен снова выполнить работу по объединению!

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

Три R s инъекции зависимостей являются

  1. Регистрация
  2. Resolve
  3. релиз

Регистр При настройке контейнера. Это происходит, когда ваше приложение начинается с Main. Решите, когда вы разрешаете корневые компоненты для своего приложения. Это то, что объединяет основные компоненты вашего приложения. Освобождение происходит, когда приложение выходит и вы удаляете контейнер, чтобы компоненты были правильно выпущены. Обратите внимание, что контейнер никогда, никогда, НИКОГДА не входит в ваше приложение помимо этого.

+1

безупречный. Отличный ответ. – InfoLearner

+0

извините im confused. Я пытаюсь зарегистрировать экземпляры, которые я использую в своем слое данных, но уровень данных не знает о единстве.dll. Если я зарегистрирую их в переднем слое, тогда передний уровень не знает классов в слое данных. – InfoLearner

+0

@ fm55: Предположим, что для вашего слоя данных требуется «ISessionFactory» из NHibernate. Скажем, ваш корень приложения ожидает, что вы перейдете в 'ISessionFactory'. Итак, вы регистрируете 'ISessionFactory' в своем контейнере. Затем, когда вы разрешаете свой корень приложения, он создает экземпляр 'ISessionFactory', который корень вашего приложения ест и переходит к слою данных. Когда приложение закрывает контейнер, освобождает 'ISessionFactory', который он разрешил для вас. – jason

1

Все зависит от того, используете ли вы Unity в переднем слое или только в слоях mid/back. Если вы используете только Unity на внутреннем сервере, вы должны поместить файл конфигурации Unity в тот же каталог, что и исполняемый файл. Если вы также используете Unity на передней панели, вы можете обнаружить, что вам нужна вторая копия файла конфигурации с исполняемым файлом front-end, поскольку она независима от внешнего.

Совет Jason только по ссылке Unity в методе начальной загрузки является хорошим советом - так что файл конфигурации потребуется в том же каталоге, что и исполняемый файл сервера, который запускает загрузку и/или в каталог исполняемого файла клиента, который запускает бутстрапинг.

В системе, в которой я сейчас работаю, мы используем один и тот же код начальной загрузки (в DLL среднего уровня) как на клиенте, так и на сервере, поскольку мы используем IoC на обоих. Это означает, что и клиентскому EXE, и нашему серверу EXE нужны отдельные копии конфигурации.

+0

Я пытаюсь зарегистрировать экземпляры, которые я использую в своем слое данных, но уровень данных не знает о единстве. DLL. Если я зарегистрирую их в переднем слое, тогда передний уровень не знает классов в слое данных. Вы рекомендуете создавать три файла конфигурации, по одному для каждого уровня и регистрировать в них экземпляры – InfoLearner

Смежные вопросы