已注册服务仍提示“不存在该类型的已注册服务”错误
解决Blazor WebAssembly依赖注入“未注册服务”错误
错误根源
你把服务注册的代码放在了构建并运行WebAssembly主机之后,这时候DI容器已经初始化完成,后续添加的服务根本不会被加载,页面注入自然找不到对应服务。
看你代码的顺序问题:
await builder.Build().RunAsync(); // 先启动了主机 ConfigureServices(builder.Services); // 后注册服务,这一步完全无效
修正代码
调整执行顺序,先注册所有服务,再构建启动主机:
修正后的程序文件代码:
using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using blazorTestApp.Client; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after"); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); // 先完成所有服务注册 ConfigureServices(builder.Services); // 再构建并运行主机 await builder.Build().RunAsync(); static void ConfigureServices(IServiceCollection serviceAdder) { serviceAdder.AddSingleton<SingletonService>(); serviceAdder.AddTransient<TransientService>(); }
额外注意
- 要确保
SingletonService和TransientService是公共类(带public修饰符),否则DI系统无法实例化它们。 - Blazor WebAssembly的服务注册必须在
builder.Build()之前完成,因为Build()会根据当前服务集合生成最终的DI容器,之后的修改不会生效。
内容的提问来源于stack exchange,提问作者Saucter
相关产品推荐
相关产品推荐

