私が達成しようとしていること:
- 現在のユーザーのロールに基づいてビュー/サービスをロードし、すべての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 でも有効ですか? もしそうなら、どこでそれを行うべきですか?
ありがとうございました