Ehs*_*adi 6 c# wpf prism prism-4
我有一个使用Prism 4的WPF桌面应用程序,在我的bootstrapper中我有以下代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码告诉prism从"[my app root]\Modules"路径加载所有.dll并检查它们是否有任何类已经实现了IModule.我想要做的是将加载过程限制为仅使用特定符号键签名的DLL,以防止任何开发人员在我的应用程序中注入它的模块.如果我正在遵循这个问题的错误路径,请提供建议.
你走在正确的道路上,但是,你还需要走得更远。DirectoryModuleCatalog 旨在加载指定目录中实现 IModule 接口的任何类型,如您所见。如果要限制进一步加载的模块(例如,使用特定密钥签名的程序集),则需要创建自定义模块目录(可能从 DirectoryModuleCatalog 派生),并重写 Initialize 方法。初始化是模块目录检查目录并加载 ModuleInfo 对象集合的地方,其中包含有关目录中任何模块的信息。通过重写此方法,您可以检查目录中的程序集,并仅从具有正确签名的程序集中加载模块。在 Initialize 方法中,您可以使用有效程序集中包含的模块的 ModuleInfos 来填充 Modules 属性。
然后,在上面的代码中,您将创建自定义模块目录,而不是创建新的 DirectoryModuleCatalog()。
请注意,根据您检查程序集签名的方式,您可能会将程序集加载到内存中(即使您没有在目录中提供任何模块)。如果是这种情况,您可能需要验证单独的 AppDomain 中的程序集,然后可以卸载该程序集(从而从内存中卸载未签名的程序集)。
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |