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

Место общения программистов C#
Ответить
Anonymous
 MEF = может испытывать разочарование?

Сообщение Anonymous »

ОБНОВЛЕНИЕ
Поскольку я пытался заставить MEF работать во всем моем приложении, я сталкивался со все большим количеством мест, где я просто не понимаю, почему он не создает мою библиотеку автоматически, когда я этого ожидаю. Я думаю, что все возвращается к тому, что говорил Рид о том, что MEF нужен для создания всего. Итак, прямо сейчас у меня есть класс чтения XML, который должен использовать мои CandySettings, но даже несмотря на то, что его свойство ICandySettings имеет атрибут [Import], оно не импортируется. Сначала я обнаружил, что [Импорт] не работает со статикой, поэтому я это изменил. Но после этого все равно не получалось. Я думаю, это потому, что я вручную создаю объект чтения XML, и вместо этого MEF хочет, чтобы я [импортировал] модуль чтения XML... а это означает, что теперь мне также нужен интерфейс для этого.
Это почти похоже на использование IoC (или, по крайней мере, для MEF), это вопрос «все или ничего». Вы не можете произвольно использовать его здесь и там, потому что в конечном итоге любой класс, в который вы хотите внедрить свойства, также должен быть создан MEF.
Пожалуйста, поправьте меня, если я ошибаюсь!

Исходное сообщение
Ну, это еще не НАСТОЛЬКО плохо. :) Но у меня возникли вопросы после того, как Рид указал мне на MEF как на потенциальную альтернативу IoC (и пока он выглядит неплохо).
У меня есть приложение, и это приложение использует плагины (упс, пропустил эту ассоциацию!). И приложение, и плагины требуют использования объекта типа CandySettings, который находится в еще одной сборке.
Сначала я попробовал использовать метод ComposeParts в MEF, но единственный способ заставить его работать — это сделать что-то подобное в коде плагина.

Код: Выделить всё

var container = new CompositionContainer();
container.ComposeParts(this, new CandySettings());
Но это не имеет никакого смысла, потому что зачем мне создавать экземпляр CandySettings в плагине? Это должно быть в приложении. Но если я помещу это в код приложения, то плагин не сможет волшебным образом понять, как получить доступ к ICandySettings, хотя я использую [Импорт] в плагине и [Экспорт] в CandySettings. EDIT (вероятно, потому, что мне нужно вызвать ComposeParts() из приложения, а затем передать ему плагин?)
Я сделал это с помощью DirectoryCatalog MEF, поскольку это позволяет плагину при его создании сканировать все сборки в текущей папке и автоматически импортировать все, что помечено атрибутом [Import]. Выглядит это так, и, возможно, в каждом плагине:

Код: Выделить всё

var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
Это прекрасно работает, но я не могу не думать, что MEF предполагалось использовать не так?

Подробнее здесь: https://stackoverflow.com/questions/265 ... rustration
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»