MEF = может испытывать разочарование?

ОБНОВИТЬ

Поскольку я пытался заставить MEF работать во всем приложении, я сталкиваюсь с большим количеством мест, где я просто не понимаю, почему он не создает мою библиотеку автоматически, когда я этого ожидаю. Я думаю, что все это восходит к тому, что Рид говорил о необходимости MEF для создания всего. Итак, сейчас у меня есть класс для чтения XML, который должен использовать мои CandySettings, но хотя его свойство ICandySettings имеет атрибут [Import], он не импортируется. Сначала я обнаружил, что [Импорт] не работает со статикой, поэтому я изменил это. Но после этого он все еще не работал. Я думаю, это потому, что я вручную создаю объект чтения XML, и MEF хочет, чтобы я вместо этого сделал [Импорт] чтения XML ... что означает, что теперь у меня должен быть также интерфейс для этого.

Это почти как использование IoC (или, по крайней мере, для MEF), это дело «все или ничего». Вы не можете просто произвольно использовать его здесь и там, потому что в конечном итоге MEF должен создавать любой класс, в который вы хотите добавить свойства.

Пожалуйста, поправьте меня, если я ошибаюсь!

Оригинальный пост

Ну, это не так уж плохо. :) Но у меня есть вопросы после того, как Рид указал мне на MEF как на потенциальную альтернативу IoC (и пока это выглядит довольно неплохо).

Рассмотрим следующую модель:альтернативный текст http://bit.ly/9W0sHt

Как вы можете видеть, у меня есть приложение, и это приложение использует плагины (к сожалению, пропустил эту ассоциацию!). И приложение, и плагины требуют использования объекта типа CandySettings, который находится в еще одной сборке.

Сначала я попытался использовать метод ComposeParts в MEF, но единственный способ заставить это работать - это сделать что-то подобное вплагин код.

var container = new CompositionContainer();
container.ComposeParts(this, new CandySettings());

Но это не имеет никакого смысла, потому что зачем мне создавать экземпляр CandySettings в плагине? Это должно быть в приложении. Но если я добавлю его в код приложения, то плагин не поймет, как добраться до ICandySettings, хотя я использую [Import] в плагине и [Export] в CandySettings.РЕДАКТИРОВАТЬ (вероятно, потому что я должен вызывать ComposeParts () из приложения и затем передавать его плагину?)

То, как я это сделал, было использовать MEFDirectoryCatalogпотому что это позволяет плагину, при его создании, сканировать все сборки в текущей папке и автоматически импортировать все, что помечено атрибутом [Import]. Так это выглядит, и, возможно, вкаждый плагин:

var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

Это прекрасно работает, но я не могу не думать, что MEF не предназначен для использования?

Ответы на вопрос(1)

Ваш ответ на вопрос