Blazor 怎么使用依赖注入

来源:这里教程网 时间:2026-02-21 17:39:17 作者:

Blazor 使用依赖注入(DI)来解耦组件与服务,让服务的创建、生命周期管理和使用更清晰可控。核心就三步:定义服务接口和实现类 → 在 Program.cs 中注册服务 → 在组件中通过 @inject 或构造函数获取并使用。

定义服务接口和实现类

先写一个接口,明确服务能做什么;再写一个类实现它。比如时间服务:

接口定义(IDateTime.cs):
public interface IDateTime { DateTime Now { get; } }
实现类(SystemDateTime.cs):
public class SystemDateTime : IDateTime { public DateTime Now => DateTime.Now; }

在 Program.cs 中注册服务

注册决定服务的生命周期和可用范围。Blazor 支持三种模式:

Singleton:整个应用共用一个实例(适合无状态工具类,如日志、配置读取器)
builder.Services.AddSingleton<idatetime systemdatetime>();</idatetime>
Scoped:每个用户会话(Blazor Server)或每个浏览器标签页(Blazor WebAssembly)一个实例(适合需保持会话上下文的服务) Transient:每次请求都新建实例(适合轻量、无共享状态的短期服务)

在组件中注入并使用服务

最常用方式是 @inject 指令,写在组件顶部即可:

@page "/counter"

@inject IDateTime DateTimeService

<h3>当前时间:@DateTimeService.Now</h3>
也可以用构造函数注入(适合需要做初始化逻辑的场景):
[Inject] public IDateTime DateTimeService { get; set; }

注意生命周期匹配实际需求

比如计数器服务若用 Singleton,所有用户会共享同一个计数值;若用 Scoped,每个用户独立计数更合理。选错生命周期可能导致数据污染或内存泄漏。

基本上就这些。不复杂但容易忽略注册步骤和生命周期选择。

相关推荐