之前我们已经了解过,如何从指定的目录中来加载 Module(原文),现在我们来看,如何从应用程序的配置文件中来加载 Module。以这种方式来加载 Module 的优点包括:1. 被加载的 Module 不需要被引用到主程序中;2. 配置文件可以根据实际情况修改,而不需要重新编译程序。
大概需要以下几步:
1. 将 Module 所在的类库文件复制到应用程序所在的地方,可以与主程序同目录,也可以在主程序下的子目录中,或是其它目录;
2. 在 Bootstrapper 中重载 CreateModuleCatalog 方法;
3. 修改应用程序的配置文件
重载 CreateModuleCatalog 方法
在 Bootstrapper.cs 中添加以下代码:
protected override Microsoft.Practices.Prism.Modularity.IModuleCatalog CreateModuleCatalog() { return new ConfigurationModuleCatalog(); }
修改配置文件(app.config)
1. 在 configuration 节点下添加 configSections
<configSections> <section name="modules" type="Microsoft.Practices.Prism.Modularity.ModulesConfigurationSection, Microsoft.Practices.Prism.Composition"/> </configSections>
2. 在 configSections 节点的同步节点(也即 configuration 的子节点),添加 modules 节点,并将要加载的 module 添加到该节点下
<modules> <module assemblyFile="Modules\Hymnal.dll" moduleType="Hymnal.HymnModule, Hymnal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="HymnModule" /> </modules>
说明:
1. configSections 节点必须是 configuration 节点下的第一个子节点,不然会出现如下错误:“System.TypeInitializationException”类型的未经处理的异常在 PresentationFramework.dll 中发生
2. 在 module 节点中,assemblyFile 属性指出 Module 所在的类库文件的相对路径;moduleType 属性为该 Module 的 Type 的 AssemblyQualifiedName;moduleName 为 Module 的名称;这三项为必须项;
3. 如果要使 Module 达到按需要加载,则可以再为其添加 startupLoaded="false" 属性。
参考网址:
https://msdn.microsoft.com/en-us/library/gg405479(v=pandp.40).aspx