我遇到了奇怪的问题。我的应用程序有下一个代码,它在启动时执行:
protected override void RegisterTypes()
{
// App.container - UnityContainer
var dvcc = new MyClientCore(new MySorter());
App.container.RegisterInstance(typeof(ClientCore), dvcc);
App.container.RegisterInstance(typeof(MyClientCore), dvcc);
this.dataProvider = new MyProvider();
this.dataProvider.Configure(App.container);
App.container.RegisterInstance(typeof(Provider), this.dataProvider);
App.container.RegisterInstance(typeof(MyProvider), this.dataProvider);
// Create view models and register them in container
this.RegisterViewModels();
// Command - singleton, that resolved in ctor view models,
// that registered in RegisterViewModels();
Command.Instance.InitCommands();
// Create and configure shell
}
当app在调试配置中执行时没有问题。此外,当app在Visual Studio中的发布配置中执行时。 但是当我尝试直接启动app时,由于在dataProvider.Configure方法中注册的依赖项的解析,我在Command ctor中得到了TypeInitializationException。
我认为这是JIT优化的原因,代码可能像
一样执行protected override void RegisterTypes()
{
Command.Instance.InitCommands();
// other method body
}
我找到了解决方案 - 标记RegisterTypes方法属性[MethodImpl(MethodImplOptions.NoOptimization)]。
但也许存在更好的方法来修复它?当这种情况用简单的词语解释时,我也会对链接感到满意。
P.S。抱歉我的英文。