MvvmCross 8.0升级指南:从7.x迁移的关键变化
前言
MvvmCross 8.0版本带来了一些重要的架构改进,这些变化主要集中在依赖注入和日志系统的设计上。本文将详细介绍从7.x版本升级到8.0需要注意的关键变化点,帮助开发者顺利完成迁移。
核心变化概述
MvvmCross 8.0最显著的变化是:
- 明确要求开发者自行实现Setup类
- 改进了依赖注入机制
- 重构了日志系统架构
这些变化使得框架更加灵活,同时减少了静态依赖,为未来的扩展打下了更好的基础。
必须显式实现Setup类
在8.0版本中,最大的变化之一是必须显式实现自己的Setup类。框架不再提供默认实现,而是要求开发者明确创建继承自平台特定MvxSetup的类。
各平台对应的Setup基类
不同平台需要使用不同的基类:
| 平台 | 基类名称 | |------------|----------------------| | iOS | MvxIosSetup | | Android | MvxAndroidSetup | | WPF | MvxWpfSetup | | UWP | MvxWindowsSetup | | Mac | MvxMacSetup | | iOS Forms | MvxFormsIosSetup | | Android Forms | MvxFormsAndroidSetup |
Setup类实现示例
最基本的Setup类实现需要处理日志系统。如果你暂时不需要日志功能,可以简单返回null:
public class Setup : MvxAndroidSetup<App>
{
protected override ILoggerProvider CreateLogProvider()
{
return null; // 或者返回实际的日志提供者
}
protected override ILoggerFactory CreateLogFactory()
{
return null; // 或者配置并返回实际的日志工厂
}
}
对于需要完整日志功能的项目,可以使用Serilog等日志框架:
public class Setup : MvxAndroidSetup<App>
{
protected override ILoggerProvider CreateLogProvider()
{
return new SerilogLoggerProvider();
}
protected override ILoggerFactory CreateLogFactory()
{
// Serilog配置
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.CreateLogger();
return new SerilogLoggerFactory();
}
}
应用类注册变化
在应用类中,现在需要明确指定你的Setup类:
public class MainApplication : MvxAndroidApplication<Setup, App>
Setup类方法签名变更
8.0版本中,许多Setup类的方法签名发生了变化,主要是为了减少对静态IoC容器的依赖。现在这些方法会接收IMvxIoCProvider
作为参数。
典型方法签名变化示例
// 7.x版本
protected virtual IMvxChildViewModelCache CreateViewModelCache()
// 8.0版本
protected virtual IMvxChildViewModelCache CreateViewModelCache(IMvxIoCProvider iocProvider)
类似的变化也出现在以下方法中:
DoRegistration
InitializeLayoutInflation
InitializeBindingResources
RegisterPlatformSpecificComponents
InitializeContextStack
InitializeViewTypeResolver
导航服务构造函数变更
MvxNavigationService
的构造函数现在需要显式接收IMvxIoCProvider
参数:
// 7.x版本
public MvxNavigationService(
IMvxViewModelLoader viewModelLoader,
IMvxViewDispatcher viewDispatcher)
// 8.0版本
public MvxNavigationService(
IMvxViewModelLoader viewModelLoader,
IMvxViewDispatcher viewDispatcher,
IMvxIoCProvider iocProvider)
这一变化使得测试更加容易,因为现在可以模拟IMvxIoCProvider
了。
绑定构建器方法变更
MvxBindingBuilder
及其子类中的多个方法现在也接收IMvxIoCProvider
参数:
// 7.x版本
public virtual void DoRegistration()
// 8.0版本
public virtual void DoRegistration(IMvxIoCProvider iocProvider)
类似的变化适用于其他绑定相关的方法。
迁移建议
- 逐步迁移:先创建一个基本的Setup类实现,确保应用能正常运行
- 日志系统:根据项目需求逐步完善日志配置
- 方法重写:检查所有重写的Setup方法,更新方法签名
- 测试验证:特别注意依赖注入相关功能的测试
总结
MvvmCross 8.0的这些变化虽然带来了一些迁移成本,但使得框架架构更加清晰,减少了静态依赖,为未来的扩展和维护提供了更好的基础。理解这些变化背后的设计理念,将帮助你更好地利用新版本的功能特性。
如果在迁移过程中遇到本文未提及的问题,建议查阅框架社区中的相关讨论,通常这些问题已经有解决方案或正在积极解决中。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考