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

.NET MAUI中依赖注入IAuthenticationService返回Null求助

问题分析与解决方法

你的IAuthenticationService实例为Null,核心原因是页面未通过依赖注入获取服务实例,同时代码里还有其他小问题,具体解决步骤如下:

1. 通过构造函数注入服务

在ProfileInformation页面中,你只是声明了IAuthenticationService字段,但没有让DI容器为其赋值。必须通过构造函数注入的方式获取服务实例:

public partial class ProfileInformation : ContentPage
{
    private readonly IAuthenticationService _authenticationService;
    private User user = new User();

    // 通过构造函数注入服务
    public ProfileInformation(IAuthenticationService authenticationService)
    {
        _authenticationService = authenticationService;
        InitializeComponent();
    }

    async void Button2_Clicked(object sender, EventArgs e)
    {
        // 修正id的类型为int,与Update方法参数匹配
        int id = 1;
        string namef = "test";
        string namel = "test";
        // 异步方法必须用await等待执行完成
        await _authenticationService.Update(id, namef, namel);
    }
}

2. 确保页面由DI容器创建

如果你的页面是通过手动new ProfileInformation()的方式导航的,DI容器无法注入服务。需要改为从DI容器获取页面实例:

比如在导航时:

// 从DI获取页面实例
var page = Services.GetRequiredService<ProfileInformation>();
await Navigation.PushAsync(page);

如果使用AppShell路由,确保在注册路由时使用DI创建页面:

// 在AppShell的构造函数或初始化方法中
Routing.RegisterRoute(nameof(ProfileInformation), typeof(ProfileInformation));
// 导航时
await Shell.Current.GoToAsync(nameof(ProfileInformation));

3. 修正其他代码问题

  • Button2_Clicked中id被赋值为字符串"1",但Update方法需要int类型,会导致编译错误,需改为int id = 1。
  • 调用异步方法Update时必须使用await,否则会导致操作未完成就继续执行后续代码,引发潜在问题。

4. 检查MauiProgram中的服务注册

你的MauiProgram中服务注册逻辑正确,但注意NavigationManager是Blazor专用服务,如果是纯MAUI项目(非Blazor混合),该服务无法被正确注入,会导致AuthenticationService构造函数注入失败,进而影响页面的服务注入。如果是纯MAUI项目,建议移除NavigationManager依赖,改用MAUI原生导航API:

修改AuthenticationService的构造函数:

public AuthenticationService(
    IHttpService httpService,
    ILocalStorageService localStorageService
) {
    _httpService = httpService;
    _localStorageService = localStorageService;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:10:38