Поскольку я пытался заставить MEF работать во всем моем приложении, я сталкивался со все большим количеством мест, где я просто не понимаю, почему он не создает мою библиотеку автоматически, когда я этого ожидаю. Я думаю, что все возвращается к тому, что говорил Рид о том, что MEF нужен для создания всего. Итак, прямо сейчас у меня есть класс чтения XML, который должен использовать мои CandySettings, но даже несмотря на то, что его свойство ICandySettings имеет атрибут [Import], оно не импортируется. Сначала я обнаружил, что [Импорт] не работает со статикой, поэтому я это изменил. Но после этого все равно не получалось. Я думаю, это потому, что я вручную создаю объект чтения XML, и вместо этого MEF хочет, чтобы я [импортировал] модуль чтения XML... а это означает, что теперь мне также нужен интерфейс для этого.
Это почти похоже на использование IoC (или, по крайней мере, для MEF), это вопрос «все или ничего». Вы не можете произвольно использовать его здесь и там, потому что в конечном итоге любой класс, в который вы хотите внедрить свойства, также должен быть создан MEF.
Пожалуйста, поправьте меня, если я ошибаюсь!
Исходное сообщение
Ну, это еще не НАСТОЛЬКО плохо.
У меня есть приложение, и это приложение использует плагины (упс, пропустил эту ассоциацию!). И приложение, и плагины требуют использования объекта типа CandySettings, который находится в еще одной сборке.
Сначала я попробовал использовать метод ComposeParts в MEF, но единственный способ заставить его работать — это сделать что-то подобное в коде плагина.
Код: Выделить всё
var container = new CompositionContainer();
container.ComposeParts(this, new CandySettings());
Я сделал это с помощью DirectoryCatalog MEF, поскольку это позволяет плагину при его создании сканировать все сборки в текущей папке и автоматически импортировать все, что помечено атрибутом [Import]. Выглядит это так, и, возможно, в каждом плагине:
Код: Выделить всё
var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
Подробнее здесь: https://stackoverflow.com/questions/265 ... rustration
Мобильная версия