【发布时间】:2016-09-21 07:30:05
【问题描述】:
我正在为我当前的 App 项目使用 Xamarin.Android / Xamarin.iOS 和 MvvmCross。
当我的 android 应用程序移动到后台时,当应用程序再次回到前面时,我得到了异常“无法从定位器 MvxDefaultViewModelLocator 构造和初始化类型的 ViewModel”(附上的屏幕截图)。但这并非每次都会发生。似乎该错误仅在应用程序长时间处于后台模式并且在设备上打开许多其他应用程序时才会发生。这和安卓的内存管理有关系吗?
感谢您的帮助。
编辑: 谢谢您的回答。这是内部异常:
MvvmCross.Plattform.Exceptions.MvxException: 运行 QuestionListViewModel 类型的 viewModel 生命周期时出现问题 --> System.Reflection.TargetInvocationException:已抛出异常 通过调用的目标 --> MvvmCross.Platfrom.Exceptions.MvxException:缺少文本提供程序 - 请在以下位置使用合适的 IMvxTextProvider 初始化 IoC MvvmCross.Localization.MvxLanguageBinder.get_TextProivder()...
所以我正在使用 MvvmCross JsonLocalization 插件。在启动时,我像这样注册我的 textprovider:
TextProviderBuilder builder = new TextProviderBuilder(fileService.LocalizationDirectoryPath);
this.builder.LoadResources(cultureKey.Trim());
Mvx.RegisterSingleton<IMvxTextProvider(builder.TextProvider);
Mvx.RegisterSingleton<IMvxTextProviderBuilder>(builder);
并在我的 ViewModel 类中像这样使用它:
public string GetText(string key)
{
string text = new MvxLanguageBinder(Constants.GeneralNamespace, "shared").GetText(key);
return text;
}
所以看起来 Android 内存管理器杀死了 textprovider 单例实例?
【问题讨论】:
-
您需要检查 InnerException 的内容并在此处发布。
-
您在哪里配置 IoC 容器?这是否发生在核心项目中 MvxApplication-Class 的 Initialize() 方法中?我希望通过构造函数注入提供 IMvxTextProviderBuilder 构建器的实例。