Структура карты и ссылки, что такое лучшие практики? - PullRequest
2 голосов
/ 15 июля 2010

Я пытаюсь использовать карту структуры в первый раз. Я раньше использовал ioc-контейнеры, но всегда с xml config. Поскольку карта структуры использует конфигурацию через код (я знаю, что это можно сделать и в xml, но большинство примеров использует конфигурацию через код), я сталкиваюсь с некоторыми проблемами со ссылками.

Давайте поработаем со следующим примером (не реальным):

3 сборки.

DataLayer BusinessLayer Услуги

BusinessLayer ссылается на DataLayer (чтобы он мог получать данные) И DataLayer, и BusinessLayer ссылаются на сборку Services, поскольку она содержит код для ведения журнала.

Я хочу, чтобы компонент Log управлялся StructureMap, чтобы я мог изменить компонент журнала.

На бизнес-уровне также есть некоторые компоненты, обслуживаемые StructureMap.

Так что моя проблема сейчас.

Куда мне положить конфиг карты структуры?

Если я помещу его в BusinessLayer, DataLayer не сможет использовать компонент Log (поскольку ссылка на бизнес-уровень будет преобразована в циклическую ссылку). Я не могу поместить его в проект Services, потому что в BusinessLayer также есть некоторые компоненты (и на бизнес-уровне есть ссылка на сборку службы).

Надеюсь, я достаточно хорошо объяснил. Основная проблема здесь заключается в том, что StructureMap нуждается в ссылке на сборку, прежде чем она может быть настроена, что, на мой взгляд, проблематично. Я все делаю неправильно?

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

Конфигурация контейнера должна находиться на верхнем уровне, на уровне представления: веб-сайт, веб-служба, консольное приложение, приложение Windows или служба Windows. Таким образом, вы можете вводить все, что вам нужно, куда угодно.

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

Я помещаю программную конфигурацию (IoC или любую другую) в метод начальной загрузки на уровне процесса. Поэтому в системе клиент / сервер клиентский процесс будет иметь свою собственную загрузочную систему для любой конфигурации, в которой он нуждается, а серверный процесс будет иметь отдельный метод начальной загрузки для любой конфигурации, которая ему нужна (это может быть повторно используемый код, или они могут быть очень разными требованиями). ). Например, клиентский загрузчик не должен знать о конфигурации DAL, а серверный загрузчик не должен знать о любой конфигурации пользовательского интерфейса.

...