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

使用Shiny.NET MAUI时IBleManager为空的问题求助

问题分析与解决

核心问题1:MainPage构造函数未触发依赖注入

你的MainPage存在两个构造函数,MAUI默认会调用无参构造函数,导致通过依赖注入传入的IBleManager从未被赋值,bleManager变量始终为null。跳转BluePage时传递的是null值,最终导致BluePage中的_bleManager为空。

核心问题2:手动注册IBleManager引发冲突

UseShiny()扩展方法已经自动注册了Shiny.NET的所有核心服务(包括IBleManager),手动添加.Services.AddSingleton<IBleManager, BleManager>()会覆盖默认注册,破坏Shiny内部的初始化逻辑。


修复步骤

1. 修正MauiProgram.cs,移除手动注册代码

using Microsoft.Extensions.Logging;
using Shiny;
using Shiny.BluetoothLE;

namespace shinyTest
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .UseShiny() // 此方法已自动完成IBleManager的注册
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

#if DEBUG
            builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
    }
}

2. 修正MainPage.xaml.cs,保留依赖注入构造函数

using Shiny.BluetoothLE;

namespace shinyTest
{
    public partial class MainPage : ContentPage
    {
        int count = 0;
        private readonly IBleManager bleManager;

        // 仅保留带依赖注入参数的构造函数
        public MainPage(IBleManager bleManager)
        {
            InitializeComponent();
            this.bleManager = bleManager;
        }

        private async void OnCounterClicked(object sender, EventArgs e)
        {
            await Navigation.PushAsync(new BluePage(bleManager)); 
        }
    }
}

3. 增强BluePage构造函数的安全性

可以在BluePage构造函数中添加空值校验,提前发现问题:

public BluePage(IBleManager bleManager)
{
    InitializeComponent();
    _bleManager = bleManager ?? throw new ArgumentNullException(nameof(bleManager));
}

额外检查项

  • 平台权限配置:
    • Android:在AndroidManifest.xml中添加对应蓝牙权限(Android 12及以下需BLUETOOTH、BLUETOOTH_ADMIN、ACCESS_FINE_LOCATION;Android 13+需BLUETOOTH_SCAN、BLUETOOTH_CONNECT)。
    • iOS:在Info.plist中添加NSBluetoothAlwaysUsageDescription和NSBluetoothPeripheralUsageDescription权限描述。
  • 版本兼容:确保Shiny.NET版本与当前MAUI版本匹配,建议使用最新稳定版。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:24:53