xamarin - MvvmCross 升级到 8.x 后,应用程序卡在 SplashScreen
问题描述
我将所有 MvvmCross 库从 7.1.2 升级到 8.0.0。根据 mvvmcross 文档中的“从 7 升级到 8”教程,我已经实现了必要的更改(覆盖 CreateLogProvider 和 CreateLogFactory 方法并将 iocProvider 作为参数添加到 InitializeFirstChance、InitializeLastChance、InitializeNavigationService 和 CreateApp):
public class Setup : MvxAndroidSetup
{
protected override IMvxAndroidViewPresenter CreateViewPresenter() => new HistoryViewPresenter(ViewAssemblies);
protected override void InitializeFirstChance(IMvxIoCProvider iocProvider)
{
base.InitializeFirstChance(iocProvider);
//Things are done here
}
protected override void InitializeLastChance(IMvxIoCProvider iocProvider)
{
base.InitializeLastChance(iocProvider);
//Things are done here
}
protected override IMvxNavigationService InitializeNavigationService(IMvxIoCProvider iocProvider)
{
var loader = CreateViewModelLoader(iocProvider);
Mvx.IoCProvider.RegisterSingleton<IMvxViewModelLoader>(loader);
InitializeViewDispatcher(iocProvider);
var dispatcher = CreateViewDispatcher();
Mvx.IoCProvider.RegisterSingleton(dispatcher);
var navigationService = new DeepNavigationService(null, loader, dispatcher, iocProvider);
Mvx.IoCProvider.RegisterSingleton<IMvxNavigationService>(navigationService);
return navigationService;
}
//Another things are done here
protected override IMvxApplication CreateApp(IMvxIoCProvider iocProvider)
{
return new App();
}
protected override ILoggerProvider CreateLogProvider()
{
return new SerilogLoggerProvider();
}
protected override ILoggerFactory CreateLogFactory()
{
Serilog.Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.CreateLogger();
return new SerilogLoggerFactory();
}
}
我还在 Core 项目中创建了自定义应用程序启动并设置了此类 RegisterCustomAppStart:
public class AppStart : MvxAppStart
{
public AppStart(IMvxApplication application, IMvxNavigationService navigationService) : base(application, navigationService) { }
protected override Task NavigateToFirstViewModel(object hint = null)
{
return NavigationService.Navigate<StartupViewModel>();
}
}
public class App : MvxApplication
{
public override void Initialize()
{
//Services and Singletons are registered here.
RegisterCustomAppStart<AppStart>();
}
}
这是问题所在 - 当我运行应用程序时,我的应用程序卡在 SplashScreen 中。有没有人遇到过类似的问题?在以前的版本中,一切都很好。我会很感激一些建议如何解决这个问题
解决方案
我解决了这个问题 - 我改变了行:
var dispatcher = CreateViewDispatcher();
为了:
var dispatcher = Mvx.IoCProvider.Resolve<IMvxViewDispatcher>();
它有效。
推荐阅读
- python - 如何在网络抓取中抓取“td”
- html - 为什么图像在 HTML/CSS 中过度扩展以悬停?
- javascript - 带有 mobx 存储的 react-bootstrap-table-next 不会呈现更改
- linux - 在打印文本文件时,在最后一行后换行 - 由于最后一行和 $USER 之间没有空格而令人困惑
- git - 新笔记本电脑,如何将我的 Github 与我的新命令提示符连接?
- python - 将 CSV 文件从 S3 加载到 RDS PostgreSQL
- assembly - 如何添加 8 位打包 m256
- javascript - 如何使用此网页上 span itemprop 行中的纯 JS 生成值?
- java - debian apt 找不到 openjdk-8-jdk
- mysql - MySQL Workbench 报错 Code: 1064 in MySQL