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

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

blazor 依赖注入(di)配置和使用方法

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.AddSingleton();
builder.Services.AddScoped();
builder.Services.AddTransientailValidator, EmailValidator>();

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

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

  • @inject 指令:写在 .razor 文件顶部,语法简洁,适用于 Razor 组件
  • 构造函数注入:用于服务类、处理器类等非组件类,Blazor 自动解析依赖链

示例(Index.razor):

Tome
Tome

先进的AI智能PPT制作工具

Tome 143
查看详情 Tome
@page "/"
@inject ICartService Cart
@inject ICounterService Counter

购物车数量:@Cart.ItemCount


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

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

  • 先定义接口(如 ICartService),明确契约
  • 再实现类(如 CartService),处理具体逻辑(注意线程安全和状态隔离)
  • 最后在 Program.cs 中注册,并指定生命周期(通常购物车用 Scoped)

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

常见问题快速排查

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

  • 服务未注册(检查 Program.cs 是否漏掉 AddScoped 等调用)
  • 注入类型与注册类型不匹配(比如注册了 CartService,却 @inject ICartService,但接口没被注册)
  • 在生命周期不兼容的上下文中使用(例如把 Transient 服务存到 Singleton 类里,导致状态污染)
  • 组件未继承 ComponentBase 或未正确标记为 @page,导致 DI 上下文未激活

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

以上就是Blazor 依赖注入(DI)配置和使用方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号