IoC / Dependency Injection - объясните код вместо XML - PullRequest
8 голосов
/ 25 марта 2010

Я в основном понимаю, как работают IoC-фреймворки, но я не совсем понимаю, как должен работать конфиг на основе кода. С помощью XML я понимаю, как можно добавить новую сборку в развернутое приложение, а затем изменить конфигурацию в XML, чтобы включить ее. Если приложение уже развернуто (то есть скомпилировано в некоторой форме), то как можно внести изменения в код без перекомпиляции? Или это то, что делают люди, просто измените конфигурацию в коде и перекомпилируйте?

Ответы [ 4 ]

14 голосов
/ 25 марта 2010

Горячая замена зависимостей - не единственная цель использования DI-контейнера.

Внедрение зависимостей (DI) - это принцип, который помогает нам разработать слабосвязанный код. Только слабая связь означает, что мы можем варьировать потребителя и услуги независимо друг от друга. Как мы достигаем этого, на этом уровне не рассматривается.

DI Containers - это платформы, которые помогают совместно использовать проводные зависимости. Это более или менее просто служебные библиотеки, которые помогают нам применять шаблоны DI. Еще раз, как мы настраиваем контейнер, перпендикулярно тому, как мы используем эти зависимости.

XML-конфигурации позволяет нам изменять конфигурацию контейнера без перекомпиляции . Код как конфигурация не.

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

2 голосов
/ 25 марта 2010

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

1 голос
/ 03 января 2013

Смена кода без перекомпиляции, НЕ возможна. Изменение конфигурации, хранящейся в Web.Config, без перезагрузки пула приложений невозможно. Однако вы можете использовать следующий сценарий, когда вам не нужно перекомпилировать код или перезапускать пул приложений.
1. Сохраните ваши сопоставления во внешнем конфигурационном файле. (XML в порядке)
2. Напишите функцию, которая загружает сопоставления из внешнего файла в ваш контейнер.
3. Выставьте функцию, которая перезагружает сопоставления.
4. Всякий раз, когда вы хотите перезагрузить сопоставления, просто вызовите метод, и вы готовы идти :)

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

0 голосов
/ 25 марта 2010

Тот факт, что контейнер DI использует код для конфигурации, не означает, что никакая конфигурация не может быть изменена без перекомпиляции. Это требует, чтобы вы думали о том, что именно вы хотите настроить таким образом, и предоставляете некоторые средства для изменения этой конфигурации (например, через файл свойств).

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