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

Blazor 依赖注入(DI)不是可选项,而是框架级基础设施——所有服务都通过统一容器管理,组件不手动 new 实例,也不硬编码依赖,解耦、可测、易维护。
服务注册:在 Program.cs 里集中配置
Blazor WebAssembly 和 Blazor Server 都使用 Program.cs(而非旧版 Startup.cs)注册服务。注册时需明确生命周期,这是关键细节:
- Singleton:整个应用生命周期只创建一次实例,适合无状态工具类、全局配置、缓存管理器
- Scoped:Blazor WebAssembly 中按浏览器标签页隔离;Blazor Server 中按 SignalR 连接(即用户会话)隔离;适合带上下文状态的服务,如购物车、表单状态管理器
- Transient:每次请求服务时都新建实例,适合轻量、无共享状态的工具类(如日志记录器、随机数生成器)
示例(Program.cs):
builder.Services.AddSingletonbuilder.Services.AddScoped
builder.Services.AddTransient
服务注入:两种方式,按场景选
组件中用 @inject 最直接;普通 C# 类(如服务内部依赖其他服务)必须用构造函数注入。
- @inject 指令:写在 .razor 文件顶部,语法简洁,适用于 Razor 组件
- 构造函数注入:用于服务类、处理器类等非组件类,Blazor 自动解析依赖链
示例(Index.razor):
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~