Что я пытаюсь сделать:
- Загрузка представлений / служб на основе роли текущего пользователя, когда все библиотеки находятся в одном каталоге
- Представления могут быть созданы несколько раз (отдельные окна)
В настоящее время мои модули загружаются из каталога, используя следующий код:
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly));
AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(AutoPopulateExportedViewsBehavior).Assembly));
// Load modules from folder
// Create Modules folder if it doesn't exist
string modulesFolder = "Modules";
if (!Directory.Exists(@".\" + modulesFolder))
{
Directory.CreateDirectory(@".\" + modulesFolder);
}
AggregateCatalog.Catalogs.Add(new DirectoryCatalog(modulesFolder));
}
Я попытался найти примеры того, что я пытаюсь сделать, и нашел их для MEF, но ни одного из них с MEF + Prism, поэтому мне интересно, является ли это той же идеей или в Prism что-то встроено как хорошо.
Я видел, что для обычного MEF лучшим решением (пожалуйста, исправьте меня, если это неверно!) Является создание пользовательского атрибута экспорта ( MEF Export Metadata ), такого как:
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple=false)]
public class UserLevelAttribute : ExportAttribute
{
public UserLevelAttribute() : base(typeof(IModule)) { }
public UserLevel User { get; set; }
}
public enum UserLevel {
Basic,
Administrator
}
Это правильный путь или в Призме есть что-то, что помогает с этим? Каков наилучший способ загрузки модулей только для уровня пользователя? В обычном MEF я бы загружал их [ImportMany]
и Lazy
, это все еще верно для Prism, если да, то где мне это делать?
Спасибо