Может MEF использоваться для получения Системы. Тип классов отмечен [Экспорт]?

Я успешно использовал MEF для получения экспортируемых экземпляров класса. Однако я столкнулся с ситуацией, где я должен перечислить ряд экспортируемых производных классов, не инстанцируя их. Я искал CompositionContainerдокументация и это только, кажется, могут к экземплярам эхо-сигнала.

Я знаю, что мог иметь статическое поле Type в каждом производном классе и экспортировать его или сделать мое собственное отражение, но я хотел бы знать, существует ли сборка - способом отметить классы с [Export] припишите и затем перечислите их System.Type.

7
задан Trillian 11 August 2010 в 16:46
поделиться

4 ответа

Как сказал Леппи, встроенного способа сделать это нет. Это сделано намеренно. Не обязательно взаимно однозначное сопоставление между экспортом и типами (например, любое количество частей может иметь экспорт свойств типа String). Кроме того, в разных моделях программирования часть могла быть получена из файла конфигурации или из динамического языка программирования, поэтому попытка получить связанный с ней тип CLR может не иметь большого смысла.

4
ответ дан 6 December 2019 в 12:45
поделиться

В зависимости от объема того, что вы пытаетесь сделать, вы потенциально также можете использовать System.ComponentModel.Composition.ReflectionModel.ReflectionModelServices, которые были введены API для поддержки кэширования каталогов по умолчанию. Предполагая, что вы используете стандартную модель атрибутивного программирования и знаете, что все ваши [Export] находятся на уровне типа (т.е.они не являются участниками), то вы можете вызвать GetPartType (part) для каждой части вашего каталога, чтобы получить тип.

Как указал Дэниел, если вы используете другие модели программирования, это не сработает для вас, но если вы используете только каталоги по умолчанию, которые поставляются с MEF, тогда он должен выполнять свою работу.

4
ответ дан 6 December 2019 в 12:45
поделиться

Что-то не так с использованием Reflection для этого?

Если нет, это мой ответ :)

Изменить:

Нет встроенного способа получить все типы в сборка с определенным атрибутом.

1
ответ дан 6 December 2019 в 12:45
поделиться

Обычно вам действительно не нужно выбирать экспорт в зависимости от типа. Вместо этого вы можете найти «правильный» экспорт на основе метаданных.

См. Раздел руководства по программированию MEF на Экспорт и метаданные .

1
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: