【发布时间】:2016-02-20 16:56:10
【问题描述】:
我在 MSVS 2015 Professional (russified) 中使用 Unity 开发 Prism 6 视图切换模块化 WPF MVVM 应用程序。 System.TypeInitializationException 在我的应用程序启动时抛出消息“'System.Windows.Application' 的类型初始化程序引发异常”。我在 App.config 文件中添加模块注册后开始抛出此异常。下面是我的应用解决方案的结构:
如您所见,该解决方案具有主项目“FlowmeterConfiguration”和两个 Prism 模块项目:授权和校准。 Prism 模块项目的名称与其模块类的名称不同。授权项目有 AuthorizationModule 类:
namespace Authorization
{
[Module(ModuleName = "AuthorizationModule", OnDemand = false)]
public class AuthorizationModule : IModule
{
. . . . .
}
}
并且校准项目有 CalibrationModule 类:
namespace Calibration
{
[Module(ModuleName = "CalibrationModule", OnDemand = false)]
public class CalibrationModule : IModule
{
. . . . .
}
}
下面是 App.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<modules>
<module assemblyFile="Authorization.dll" moduleType="Authorization.AuthorizationModule, Authorization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="AuthorizationModule" startupLoaded="true" />
<module assemblyFile="Calibration.dll" moduleType="Calibration.CalibrationModule, Calibration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="CalibrationModule" startupLoaded="true" />
</modules>
</configuration>
下面是引导程序类:
namespace FlowmeterConfigurator
{
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
}
}
如果我从 App.config 中删除模块注册并从引导程序中删除 CreateModuleCatalog 方法,则不会抛出异常并且应用程序成功启动。如果我尝试通过代码(在 Bootstrepper 中)注册模块,则模块类型:Authorization and Calibration 无法识别并标记为错误(在这种情况下,Authorization.AuthrizationModule 和 Calibration.CalibrationModule 也无法识别)。但我必须注册我的模块!我做错了什么?请帮帮我。
【问题讨论】:
-
在您的问题中将答案标记为解决方案,如果对您有帮助的话