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, чтобы экспортировать представление как нужный тип.