Я прочитал документацию по MEF в Codeplex и пытаюсь понять, как для выполнения моей задачи:
Я хотел бы создать структуру приложения со стандартными компонентами, которые можно использовать для выполнения некоторой обычной работы (например, для отображения списка записей из базы данных). Плагины следует использовать многократно, каждый раз с разной конфигурацией. (например, у меня есть 5 окон в приложении, где я отображаю списки записей, каждый из которых имеет разные типы объектов, разные столбцы, каждый из которых должен иметь свои собственные точки расширения, например, для отображения сведений о записи, которые должны быть удовлетворены другой копией другого общего плагин).
Подходит ли MEF для такого сценария? Как определить контракты? Должен ли я использовать метаданные? Могу ли я определить отношения с помощью файлов конфигурации?
1 ответ
Да, вы можете использовать МЭФ. MEF поддерживает создание объектов NonShared с использованием атрибута PartCreationPolicy:
[PartCreationPolicy(CreationPolicy.NonShared)]
Дополнительные сведения об этом здесь.
Лично я бы сделал подключение и настройку после импорта компонента на цель. Однако я не уверен, насколько универсальным вы хотите, чтобы ваше приложение было, если вы создаете «фреймворк» для выполнения определенных решений, я могу представить, что вы хотите, чтобы конфигурация была отдельной. Вы можете пойти дальше и создать ISuperDuperGridConfiguration и импортировать их в конструктор [ImportingConstructor] вашего плагина сетки. Изнутри вашей цели (куда импортируются сетки) установите местоположение сетки в плагине сетки (например, основная сетка, боковая сетка) и используйте данные, хранящиеся в ISuperDuperGridConfiguration, для дальнейшей настройки самого плагина сетки.
Однако вы можете легко зайти «слишком далеко» с MEF, в зависимости от ваших целей. У нас есть полностью компонентный пользовательский интерфейс MEF для приложения с индивидуальными потребностями для каждого отдельного клиента. Иногда у меня возникает желание поместить отдельные кнопки с ленты в расширение MEF.
Как видите, в зависимости от ваших потребностей вы можете и иногда заходите слишком далеко.
Я не думаю, что вам понадобятся метаданные, особенно в вашем случае, но, возможно, кто-то еще может поделиться другим мнением по этому поводу ;-).
Я надеюсь, что это ответит на ваш вопрос, если нет, пожалуйста, прокомментируйте, чтобы я мог выделить больше аспектов. В целом, использование MEF было очень положительным для нас, и мы используем его далеко за пределами «привет, мир», так сказать. Так по крайней мере у вас есть это!
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.