2012-01-16 4 views
6

私は、プリズム4を使用してWPFデスクトップアプリケーションを持っている私のブートストラップに私は次のコードを持っている:上記のコードをプリズム4を制限して特殊な符号付きモジュールのみをロードするにはどうすればよいですか?

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; 
} 

は「[私のアプリルート] \モジュール」からすべての.dllをロードするためにプリズムを語っていますIModuleを実装しているクラスがあるかどうかを確認してください。私がしたいのは、特定の署名キーで署名されたDLLだけにローディングプロセスを制限して、開発者が自分のアプリケーションにモジュールを挿入しないようにすることです。私がそのような問題のために間違った道をたどっているならばアドバイスをしてください

答えて

2

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

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

アセンブリのシグネチャの確認方法によっては、カタログにモジュールを使用できない場合でも、アセンブリをメモリにロードしている可能性があります。この場合、アセンブリを個別のAppDomainで検証し、アンロードして(つまり、メモリから署名のないアセンブリをアンロードする)ことができます。

+1

これは、ブライアンに感謝してくれました。 –

関連する問題