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

如何在Blazor中注入服务?客户端项目服务注入报错求助

问题分析与解决方案

我一眼就发现问题所在啦——你服务配置的时机完全错了!

核心问题

你把ConfigureServices(builder.Services)的调用放在了await builder.Build().RunAsync();之后,这会导致两个致命问题:

  • RunAsync()是启动Blazor WebAssembly主机并阻塞当前线程的方法,后面的代码永远不会被执行
  • 就算它能执行,服务容器必须在主机Build()之前配置完成,构建后的主机无法再添加新服务

修正后的代码

把服务配置的调用移到builder.Build()之前,调整后的Program.cs应该是这样:

public class Program {
    public static async Task Main(string[] args) {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("#app");
        builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
        
        // 关键:在构建主机前配置服务
        ConfigureServices(builder.Services);
        
        await builder.Build().RunAsync();
    }
    public static void ConfigureServices(IServiceCollection services) {
        services.AddSingleton<IMetamaskInterop, MetamaskBlazorInterop>();
        services.AddSingleton<MetamaskService>();
        services.AddSingleton<MetamaskInterceptor>();
    }
}

额外检查项

如果调整后还是报错,可以再确认这两点:

  • 确保MetamaskService、MetamaskInterceptor这些类是public访问修饰符,且没有私有构造函数(否则DI容器无法实例化它们)
  • 检查组件里的注入代码是否有拼写/大小写错误,比如metamaskService的变量名是否和服务类匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:07