MvvmCross 8.0升级指南:从7.x迁移的关键变化

MvvmCross 8.0升级指南:从7.x迁移的关键变化

MvvmCross The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac. MvvmCross 项目地址: https://gitcode.com/gh_mirrors/mv/MvvmCross

前言

MvvmCross 8.0版本带来了一些重要的架构改进,这些变化主要集中在依赖注入和日志系统的设计上。本文将详细介绍从7.x版本升级到8.0需要注意的关键变化点,帮助开发者顺利完成迁移。

核心变化概述

MvvmCross 8.0最显著的变化是:

  1. 明确要求开发者自行实现Setup类
  2. 改进了依赖注入机制
  3. 重构了日志系统架构

这些变化使得框架更加灵活,同时减少了静态依赖,为未来的扩展打下了更好的基础。

必须显式实现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)

类似的变化适用于其他绑定相关的方法。

迁移建议

  1. 逐步迁移:先创建一个基本的Setup类实现,确保应用能正常运行
  2. 日志系统:根据项目需求逐步完善日志配置
  3. 方法重写:检查所有重写的Setup方法,更新方法签名
  4. 测试验证:特别注意依赖注入相关功能的测试

总结

MvvmCross 8.0的这些变化虽然带来了一些迁移成本,但使得框架架构更加清晰,减少了静态依赖,为未来的扩展和维护提供了更好的基础。理解这些变化背后的设计理念,将帮助你更好地利用新版本的功能特性。

如果在迁移过程中遇到本文未提及的问题,建议查阅框架社区中的相关讨论,通常这些问题已经有解决方案或正在积极解决中。

MvvmCross The .NET MVVM framework for cross-platform solutions, including Xamarin.iOS, Xamarin.Android, Windows and Mac. MvvmCross 项目地址: https://gitcode.com/gh_mirrors/mv/MvvmCross

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶真蔷Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值