Prism v4 - загрузка только некоторых модулей из каталога на основе ролей - MEF - PullRequest
1 голос
/ 05 января 2012

Что я пытаюсь сделать:

  • Загрузка представлений / служб на основе роли текущего пользователя, когда все библиотеки находятся в одном каталоге
  • Представления могут быть созданы несколько раз (отдельные окна)

В настоящее время мои модули загружаются из каталога, используя следующий код:

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, если да, то где мне это делать?

Спасибо

1 Ответ

1 голос
/ 06 января 2012

Я на самом деле смотрю на управление ролями сегодня и из сообщения на форуме Prism от одного из разработчиков ( Guido Maliandi ):

Тема аутентификации и авторизации не поддерживается в Призма из коробки.

Таким образом, мы должны свернуть свои собственные, но Гвидо Малианди написал в блоге один из способов «Аутентификация и авторизация на основе ролей в Prism v4» , который использует сервис для получения списка модулей. Имена для менеджера модулей для загрузки.

...