Нужно ли настраивать Unity в коде или файле конфигурации? - PullRequest
16 голосов
/ 24 марта 2011

Инфраструктура внедрения зависимостей Microsoft Unity может быть настроена либо через код, либо через файл конфигурации приложений (app.config).

Пример кода:

IUnityContainer container = new UnityContainer()
    .RegisterType<IInterface, ConcreteImplementation>();

Пример конфигурации:

<unity>
    <containers>
        <container>
            <types>
                <type type="IInterface, MyAssembly"
                      mapTo="ConcreteImplementation, MyAssembly" />

Каковы преимущества / недостатки каждого подхода? Я могу вспомнить очевидное преимущество «Пользователи могут легко настроить ваше приложение» и очевидный недостаток «Пользователи могут легко сломать ваше приложение», но есть ли что-то менее очевидное?

Ответы [ 3 ]

31 голосов
/ 24 марта 2011

Конфигурация XML действительно выгодна только для одной вещи: Позднее связывание .С помощью конфигурации XML вы можете изменить структуру вашего приложения без перекомпиляции всего приложения.Это особенно актуально для приложений ISV, которые поддерживают степень пользовательской конфигурации .Независимые поставщики программного обеспечения могут поставлять скомпилированное приложение с поведением по умолчанию, но позволяют клиентам / пользователям изменять части поведения, изменяя конфигурацию.

Однако, Конфигурация XML хрупкая и многословная .С точки зрения разработчика, работать с ним - просто боль.

  • Конфигурация имеет тенденцию ломаться при переименовании типов или сборок.
  • Необходимо вручную скопировать соответствующие DLL-файлы ввыходной каталог (или сделать это с помощью сценария сборки).
  • Общая детализация затрудняет работу с ним.
  • Поддержка инструментов слабее, чем для строго типизированного кода.

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

10 голосов
/ 14 ноября 2011

Одним существенным недостатком конфигурации с помощью кода является то, что для кода требуется ссылка на сборки. Это означает, что я должен добавить ссылки проекта или DLL в проект для компиляции кода.

Внедрение зависимостей должно удалять зависимости между компонентами. Инициализация с помощью кода повторно вводит зависимость, требуя ссылки на проект или DLL. Файл конфигурации xml может ссылаться на любую сборку.

Если я создаю новую реализацию на основе интерфейса, я могу интегрировать новую реализацию в существующее приложение, добавив скомпилированную DLL и обновив файл конфигурации xml. Если я выполняю настройку с помощью кода, мне придется перекомпилировать приложение, чтобы заменить реализацию.

2 голосов
/ 14 октября 2011

На вопрос уже дан ответ, но я хочу обобщить свой опыт:

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

Я использую конфигурацию XML для нестандартных задач, таких как настройка производительности (в среде, где перекомпиляция занимает много времени).

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