6

Prism 4を使用するWPFデスクトップアプリケーションがあり、ブートストラッパーに次のコードがあります。

protected override IModuleCatalog CreateModuleCatalog()
{
   var filepath = Assembly.GetExecutingAssembly().Location;
   var path = Path.GetDirectoryName(filepath);
   System.IO.Directory.SetCurrentDirectory(path);
   path = Path.Combine(path, "Modules");
   var moduleCatalog = new DirectoryModuleCatalog() { ModulePath = path };
   return moduleCatalog;
}

上記のコードは、「[my approot] \ Modules」パスからすべての.dllをロードし、それらをチェックして、クラスがIModuleを実装しているかどうかを確認するようにprismに指示しています。私がやりたいのは、ロードプロセスを特定の署名キーで署名されたDLLのみに制限して、開発者がそのモジュールをアプリケーションに挿入できないようにすることです。私がそのような問題のために間違った道をたどっているならば、アドバイスをしてください。

4

2 に答える 2

3

あなたは正しい道を進んでいます、しかし、あなたはもう少し先に進む必要があります。DirectoryModuleCatalogは、これまで見てきたように、IModuleインターフェイスを実装する指定されたディレクトリ内の任意のタイプをロードするように設計されています。さらにロードされるモジュールを制限する場合(たとえば、特定のキーで署名されたアセンブリに)、カスタムモジュールカタログ(DirectoryModuleCatalogから派生する可能性があります)を作成し、Initializeメソッドをオーバーライドする必要があります。初期化は、モジュールカタログがディレクトリを調べ、ディレクトリ内のモジュールに関する情報を含むModuleInfoオブジェクトのコレクションをロードする場所です。このメソッドをオーバーライドすることにより、ディレクトリ内のアセンブリを調べて、適切なシグニチャを持つアセンブリからモジュールのみをロードできます。Initializeメソッドでは、

次に、上記のコードでは、新しいDirectoryModuleCatalog()を作成するのではなく、カスタムモジュールカタログを作成します。

アセンブリの署名を確認する方法によっては、アセンブリをメモリにロードしている場合があることに注意してください(カタログでモジュールを使用できない場合でも)。この場合は、別のAppDomainでアセンブリを検証して、アンロードできるようにすることができます(したがって、署名されていないアセンブリをメモリからアンロードします)。

于 2012-06-19T01:02:36.850 に答える
0

このカスタムDirectoryModuleCatalogを作成しました。ここで、包含/除外セットを指定できます。

于 2013-10-24T07:50:23.830 に答える