Давайте пока проигнорируем Unity и MEF и посмотрим, что вы описываете.
если у меня есть конструктор зависимостей, указывающий view model
, Unity инициализирует его для меня вместе с зависимостями виртуальной машины (в других сервисах и модулях).
Этот механизм называется Внедрение зависимостей (DI) и является реализацией принципа Inversion of Control (IoC) . Также обратите внимание, что DI не совпадает с Расположение службы (SL) .
Ваш конкретный пример называется внедрение конструктора , в результате чего зависимости вводятся в конструируемый тип, поэтому:
public MyView(MyViewModel viewModel) { }
Является ли сайт для конструктора инъекций. Теперь давайте посмотрим на две разные контейнерные технологии:
Unity - это контейнер IoC в традиционном смысле. Вы регистрируете известные детали во время выполнения, которое создает каталог, и когда вы запрашиваете деталь из контейнера, она автоматически разрешает необходимые зависимости.
MEF основан на обнаружении и составлении неизвестных частей , т. Е. Он создает свой контейнер, формируя список из экспортных поставщиков (либо каталогов, либо других поставщиков). Когда вы запрашиваете составную часть, она по умолчанию выберет конструктор без параметров, например ::101031
public MyView() { }
Если вы не украсите целевой конструктор атрибутом [ImportingConstructor]
, который позволит MEF выбрать соответствующий конструктор и разрешить любые зависимости:
[ImportingConstructor]
public MyView(MyViewModel viewModel) { }
Также обратите внимание, что MEF поддерживает внедрение свойства - [Import]
и [ImportMany]
атрибуты:
[Import]
public MyViewModel ViewModel { get; set; }
Хотя я предпочитаю использовать конструктор, поскольку он лучше описывает зависимости, необходимые для работы вашего класса.
Теперь, на момент написания, это подходит для MEF 1.0 с использованием модели атрибутного программирования. В MEF 2.0 (а также через MEFContrib) существуют механизмы для поддержки моделей программирования на основе регистрации и соглашения.
Короче говоря, да вы можете использовать MEF для внедрения зависимостей.