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

.NET MAUI应用中如何将MauiContext注入Prism DI容器

问题分析与解决方案

核心问题

你原代码的错误在于先调用builder.Build()生成了MauiApp实例,之后再修改builder.Services的注册不会生效——因为Build()方法已经完成了容器的初始化,后续对builder的配置不会同步到已创建的容器中。

正确实现方式

方式一:直接在已构建的容器中注册实例

MauiApp的Services属性直接指向已初始化的服务容器,你可以直接通过它添加MauiContext实例:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    // 先完成其他类型注册逻辑
    var mauiApp = builder.Build();
    
    // 直接通过已创建的容器添加单例实例
    var mauiContext = new MauiContext(mauiApp.Services);
    mauiApp.Services.AddSingleton(mauiContext);
    
    return mauiApp;
}

方式二:提前注册工厂(推荐)

如果想在Build()前完成注册,可以通过工厂委托,让容器在需要MauiContext时自动解析IServiceProvider来创建实例,避免手动实例化的依赖:

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    // 其他类型注册逻辑
    
    // 注册MauiContext的工厂函数,容器会自动注入所需的IServiceProvider
    builder.Services.AddSingleton<MauiContext>(serviceProvider => new MauiContext(serviceProvider));
    
    var mauiApp = builder.Build();
    return mauiApp;
}

关于ContainerLocator尝试无效的原因

你之前通过ContainerLocator.Container获取容器后,尝试解析IContainerRegistry是错误的——DryIoc中并没有这个默认注册的类型。即使拿到容器实例,正确的注册方式应该是调用container.RegisterInstance(mauiContext),但相比之下,前面两种方式更符合MAUI的DI使用规范,也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:45:34