Prism v4 - 根据角色 - MEF仅从目录加载一些模块

时间:2012-01-05 16:28:51

标签: c# wpf prism mef prism-4

我正在努力实现的目标:

  • 根据当前用户的角色加载视图/服务,同时将所有dll放在单个目录中
  • 可以多次创建视图(单独的窗口)

我目前使用以下代码从目录加载模块:

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
}

这是正确的方法还是Prism中的某些东西有助于此?仅为用户级别加载模块的最佳方法是什么?在常规MEF中,我会执行[ImportMany]Lazy加载它们,这对Prism仍然有效,如果是这样,我应该在哪里这样做?

谢谢

1 个答案:

答案 0 :(得分:1)

我实际上是在今天自己看一下角色管理,并从其中一位开发人员(Guido Maliandi)的Prism论坛上发帖:

  

不支持身份验证和授权的主题   棱镜开箱即用。

所以我们必须推出自己的,但Guido Maliandi做了一篇博客文章,展示了一种做"Authentication and role based authorization in Prism v4"的方法,该方法利用服务获取模块管理器加载的模块名列表。