我以棱镜为例;这是我第一次玩WPF。我写了两个模块; orderModule和orderDetailModule。我能够运行我的应用程序并让它们填充在一个屏幕上,现在我只想加载一个模块并通过单击按钮加载另一个模块。我以前在代码中加载我的模块,然后我注意到prism正在使用xml,所以我也尝试这样做。由于某种原因,它无法找到它们,我得到的完整错误是:
Microsoft.Practices.Composite.Modularity.ModuleInitializeException未处理 Message =“无法从加载的程序集中检索模块类型NetworkOrderManagement.WPF_Modules.Order,OrderModule。您可能需要指定更完全限定的类型名称。”
这是我的app.config中的模块部分:
<modules>
<module assemblyFile="WPFOrderModule.dll"
moduleType="NetworkOrderManagement.WPF_Modules.Order, OrderModule"
moduleName="OrderModule"/>
<module assemblyFile="WPFOrderDetailModule.dll"
moduleType="NetworkOrderManagement.WPF_Modules.OrderDetail, OrderDetailModule"
moduleName="OrderDetailModule"
startupLoaded="false"/>
在模块配置部分中,定义您的模块。为此,请添加模块XML元素。该元素具有以下属性:
assemblyFile。此属性指定模块程序集的位置。此属性是必需的。
moduleType。此属性指定模块的程序集中实现IModule接口的类型。此属性是必需的。
MODULENAME。此属性指定模块的名称。此属性是必需的。
startupLoaded。此属性指定模块是否在启动时加载。如果其值为true(这是默认值),则应在启动时加载模块。如果其值为false,则不应在启动时加载模块;相反,它应该按需加载。此属性不是必需的。
我实现IModule的OrderModule位于名称空间NetworkOrderManagement.WPF_Modules.Order中。
任何想法?
答案 0 :(得分:6)
这可能是使用反射来根据其类型加载模块。您必须使用完全限定的类型名称进行反射才能工作。这通常是以下格式:“Full.Namespace.TypeName,AssemblyName”。这将是最基本的命名。如果这没有解决,那么你必须开始添加addtional属性,包括版本,语言等等。