Я прочитал документацию по MEF в Codeplex и пытаюсь понять, как для выполнения моей задачи:

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

Подходит ли MEF для такого сценария? Как определить контракты? Должен ли я использовать метаданные? Могу ли я определить отношения с помощью файлов конфигурации?

0
kubal5003 21 Мар 2011 в 21:38

1 ответ

Да, вы можете использовать МЭФ. MEF поддерживает создание объектов NonShared с использованием атрибута PartCreationPolicy:

[PartCreationPolicy(CreationPolicy.NonShared)]

Дополнительные сведения об этом здесь.

Лично я бы сделал подключение и настройку после импорта компонента на цель. Однако я не уверен, насколько универсальным вы хотите, чтобы ваше приложение было, если вы создаете «фреймворк» для выполнения определенных решений, я могу представить, что вы хотите, чтобы конфигурация была отдельной. Вы можете пойти дальше и создать ISuperDuperGridConfiguration и импортировать их в конструктор [ImportingConstructor] вашего плагина сетки. Изнутри вашей цели (куда импортируются сетки) установите местоположение сетки в плагине сетки (например, основная сетка, боковая сетка) и используйте данные, хранящиеся в ISuperDuperGridConfiguration, для дальнейшей настройки самого плагина сетки.

Однако вы можете легко зайти «слишком далеко» с MEF, в зависимости от ваших целей. У нас есть полностью компонентный пользовательский интерфейс MEF для приложения с индивидуальными потребностями для каждого отдельного клиента. Иногда у меня возникает желание поместить отдельные кнопки с ленты в расширение MEF.

Как видите, в зависимости от ваших потребностей вы можете и иногда заходите слишком далеко.

Я не думаю, что вам понадобятся метаданные, особенно в вашем случае, но, возможно, кто-то еще может поделиться другим мнением по этому поводу ;-).

Я надеюсь, что это ответит на ваш вопрос, если нет, пожалуйста, прокомментируйте, чтобы я мог выделить больше аспектов. В целом, использование MEF было очень положительным для нас, и мы используем его далеко за пределами «привет, мир», так сказать. Так по крайней мере у вас есть это!

2
Dennis Smit 22 Мар 2011 в 05:34
Kubal5003: Вам нужна дополнительная информация, чтобы принять это как ответ? Я бы с удовольствием предоставил.
 – 
Dennis Smit
25 Мар 2011 в 02:16