MEF, как получить вид с помощью контейнера?

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

[ViewExport(RegionName = "CustTabs")]
[ViewSortHint("20")]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class SomeLocalView : UserControl

Создание видов и ViewModels с помощью них работает хорошо. Теперь для одного случая мне нужно экспортировать все виды со специальным RegionName. Для других экспортов (и имен контрактов вместо названий регионов) я бы использовал

container.GetExportedValues<SomeType>("CustTabs");

получить / создать все виды с этим регионом / контрактом. Но это не работает для вещей, экспортируемых с помощью ViewExport.

Так как же получить / создать классы, экспортированные с помощью атрибута ViewExport из контейнера?

1 ответ

Решение

ViewExport атрибут автоматически регистрирует все представления, к которым он прикреплен, как UserControls в контейнере. По памяти, я думаю, вы можете получить их список с

container.GetExportedValues<Lazy<UserControl,IViewRegionRegistration>>;

Проверка метаданных покажет вам, в каком регионе они зарегистрированы.

Единственный другой способ, который я могу придумать, может быть немного чище, это добавить дополнительный атрибут Export, чтобы экспортировать представление как нужный тип.

Другие вопросы по тегам