1

私が達成しようとしていること:

  • 現在のユーザーのロールに基づいてビュー/サービスをロードし、すべての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 でも有効ですか? もしそうなら、どこでそれを行うべきですか?

ありがとうございました

4

1 に答える 1

1

私は実際に今日、私自身と、開発者の 1 人 ( Guido Maliandi ) による Prism フォーラムへの投稿から、ロール管理について調べています。

認証と承認のサブジェクトは、そのままでは Prism ではサポートされていません。

そのため、独自のロールを作成する必要がありますが、Guido Maliandi は、サービスを利用してモジュール マネージャーがロードするモジュール名のリストを取得する「Prism v4 での認証とロール ベースの承認」を行う 1 つの方法を示すブログ投稿を行いました。

于 2012-01-06T15:03:17.660 に答える