You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms迁移.NET 7 Maui时依赖服务注册致崩溃求助

解决.NET MAUI迁移中DependencyService注册导致HttpClient崩溃的问题
  • 改用MAUI内置依赖注入系统替代Xamarin.DependencyService
    MAUI不再推荐使用Xamarin的DependencyService,而是采用.NET原生依赖注入体系。将服务注册逻辑从AppDelegate.cs迁移到MauiProgram.cs的CreateMauiApp方法中:

    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        // 注册业务服务
        .Services.AddTransient<IWorkService, WorkService>()
        .Services.AddTransient<ISalesService, SalesService>();
    
    // 推荐通过IHttpClientFactory管理HttpClient生命周期
    builder.Services.AddHttpClient();
    
    return builder.Build();
    

    后续在页面、ViewModel中通过构造函数注入获取服务实例,替代DependencyService.Get<IWorkService>()的调用方式:

    public class MainViewModel
    {
        private readonly IWorkService _workService;
    
        public MainViewModel(IWorkService workService)
        {
            _workService = workService;
        }
    }
    
  • 排查服务构造函数的HttpClient使用问题
    检查WorkService和SalesService的实现细节:

    • 禁止直接new HttpClient(),改用注入IHttpClientFactory创建实例,MAUI框架会统一管理HttpClient的连接池与生命周期,避免资源冲突。
    • 确认服务间无循环依赖(如A依赖B、B又依赖A),循环依赖会导致实例化失败,进而触发NullReferenceException。
  • 添加全局异常捕获定位问题根源
    异步方法的未捕获异常无法被局部try-catch捕获,可在App.xaml.cs中添加全局异常处理,获取NullReferenceException的具体堆栈信息:

    protected override void OnStart()
    {
        AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
        {
            var exception = e.ExceptionObject as Exception;
            Console.WriteLine($"未处理异常堆栈: {exception?.StackTrace}");
        };
    
        TaskScheduler.UnobservedTaskException += (sender, e) =>
        {
            e.SetObserved();
            Console.WriteLine($"异步未处理异常堆栈: {e.Exception.StackTrace}");
        };
    }
    
  • 清理AppDelegate中的旧注册代码
    彻底删除AppDelegate.cs的FinishedLaunching方法内的DependencyService.Register语句,避免新旧服务注册机制冲突。

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:52:19