通八洲科技

Blazor 依赖注入(DI)配置和使用方法

日期:2025-12-14 00:00 / 作者:星降
Blazor依赖注入是框架级基础设施,服务需在Program.cs中按生命周期注册(Singleton/Scoped/Transient),组件用@inject或构造函数注入,自定义服务须接口+实现+注册闭环,Scoped在WebAssembly中按标签页隔离。

Blazor 依赖注入(DI)不是可选项,而是框架级基础设施——所有服务都通过统一容器管理,组件不手动 new 实例,也不硬编码依赖,解耦、可测、易维护。

服务注册:在 Program.cs 里集中配置

Blazor WebAssembly 和 Blazor Server 都使用 Program.cs(而非旧版 Startup.cs)注册服务。注册时需明确生命周期,这是关键细节:

示例(Program.cs):

builder.Services.AddSingleton();
builder.Services.AddScoped();
builder.Services.AddTransientailValidator, EmailValidator>();

服务注入:两种方式,按场景选

组件中用 @inject 最直接;普通 C# 类(如服务内部依赖其他服务)必须用构造函数注入。

示例(Index.razor):

@page "/"
@inject ICartService Cart
@inject ICounterService Counter

购物车数量:@Cart.ItemCount


自定义服务:接口 + 实现 + 注册三步走

写一个真正可用的服务,要闭环:

特别提醒:Scoped 服务在 WebAssembly 中不会跨标签页共享,同一标签页内多个组件注入的是同一个实例——这点常被误认为“不生效”,其实是设计如此。

常见问题快速排查

注入失败?多半是这几种情况:

基本上就这些。不复杂,但容易忽略注册和生命周期的对应关系。