Как я могу уменьшить количество конфигурации, необходимой в .config для внедрения зависимостей Unity? - PullRequest
1 голос
/ 21 февраля 2010

У меня есть инъекция зависимостей, работающая с Unity, и она работает хорошо, но я хочу уменьшить количество ненужных ошибок в app.config, поскольку он становится огромным.

Это проблема, потому что клиент регулярно «очищает» конфигурацию, удаляя комментарии и т. Д., И в итоге мы получаем несколько сотен строк неприятного XML без объяснения причин.

Итак, есть ли способ;

  1. Уменьшить количество беспорядка, используя значения по умолчанию?
  2. Переместить конфигурацию в другой файл .config, который поможет ее изолировать?

Я понимаю, что в .Net 4.0 есть несколько полезных вещей для сокращения файлов .config, поможет ли это в настройках Unity?

Заранее спасибо,

Ryan

Ответы [ 2 ]

3 голосов
/ 21 февраля 2010

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

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

И StructureMap, и Windsor имеют функции, которые делают это намного проще, но в любом случае Конфигурация в конфигурации должна быть оставлена ​​для сценариев, где вам действительно нужно иметь возможность менять зависимости после компиляции .

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

2 голосов
/ 21 февраля 2010

С моей точки зрения у вас есть два варианта:

  • Перейти к другому файлу конфигурации.
  • Напишите материал IoC в коде, мне больше нравится этот способ, потому что он более читабелен. У вас может быть статическая контейнерная переменная, которую вы создаете с помощью кода: в обычном случае по умолчанию или с mocks в модульных тестах.

RepositoryContainer.Contanier = ProductionRepositories (); RepositoryContainer.Container = MockRepositories ();

...