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

Maui Blazor中如何为Maui服务与Blazor服务共享ServiceProvider

实现Maui与Blazor共享单例服务的方案

核心原理:MauiBlazor 应用中的Blazor WebView默认不会创建独立的依赖注入容器,和Maui宿主共用同一个IServiceProvider,仅需将服务统一注册到Maui全局DI容器,两边即可获取到同一个单例实例,完全不需要额外维护静态单例。

具体实现步骤
  • 第一步:定义公共服务接口和实现类,示例代码如下:
// 公共服务接口
public interface ISharedService
{
    string GetSharedData();
    void UpdateSharedData(string data);
}

// 服务实现
public class SharedService : ISharedService
{
    private string _storedData;
    public string GetSharedData() => _storedData;
    public void UpdateSharedData(string data) => _storedData = data;
}
  • 第二步:在Maui项目的MauiProgram.cs中注册单例服务,仅需注册一次即可:
public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

        builder.Services.AddMauiBlazorWebView();
        // 注册共享单例服务
        builder.Services.AddSingleton<ISharedService, SharedService>();

        return builder.Build();
    }
}

注意不要在Blazor侧的配置文件或组件中重复注册该服务,重复注册会覆盖原有注册逻辑,导致两边获取的实例不一致

  • 第三步:在Maui原生侧使用服务,直接通过构造函数注入即可,示例:
public partial class MainPage : ContentPage
{
    private readonly ISharedService _sharedService;
    public MainPage(ISharedService sharedService)
    {
        InitializeComponent();
        _sharedService = sharedService;
        // 原生侧修改共享数据
        _sharedService.UpdateSharedData("来自Maui原生侧的数据");
    }
}
  • 第四步:在Blazor组件侧使用服务,用Blazor原生注入语法即可,示例:
@inject ISharedService SharedService

<h3>Blazor组件获取共享数据</h3>
<p>当前共享值:@SharedService.GetSharedData()</p>

<button @onclick="ModifyData">Blazor侧修改数据</button>

@code {
    private void ModifyData()
    {
        SharedService.UpdateSharedData("来自Blazor侧的更新数据");
    }
}
注意事项
  • 多线程场景下操作共享服务的公共属性/方法时,自行加锁保证线程安全即可,用法和普通单例服务完全一致
  • 如果出现两边实例不一致的问题,优先排查全局是否有重复注册同服务的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:39:04