MEF - использовать одни и те же плагины несколько раз - PullRequest
0 голосов
/ 21 марта 2011

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

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

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

1 Ответ

2 голосов
/ 22 марта 2011

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

[PartCreationPolicy(CreationPolicy.NonShared)]

Подробнее об этом здесь .

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

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

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

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

...