.NET 8 中的 KeyedService

💡 原文中文,约9300字,阅读约需23分钟。
📝

内容提要

.NET 8在Preview 7中引入了KeyedService支持,可以方便按名称获取服务。示例展示了基本使用和使用KeyedService.AnyKey捕获未注册的服务的情况。KeyedService还有一些特殊情况,如允许为null的serviceKey,但实际上为null时不是keyed service。构造函数中可以使用ServiceKeyAttribute获取注册的serviceKey。对于scoped service的支持有问题。可以结合Options实现基于options的named service。总体来说,KeyedService解决了一些named service的问题,但还有一些bug。

🎯

关键要点

  • .NET 8 在 Preview 7 中引入了 KeyedService 支持,方便按名称获取服务。
  • 示例展示了基本使用和使用 KeyedService.AnyKey 捕获未注册服务的情况。
  • KeyedService 允许为 null 的 serviceKey,但实际为 null 时不是 keyed service。
  • 构造函数中可以使用 ServiceKeyAttribute 获取注册的 serviceKey。
  • 对于 scoped service 的支持存在问题,使用时可能会发生异常。
  • 可以结合 Options 实现基于 options 的 named service。
  • 总体上 KeyedService 解决了一些 named service 的问题,但仍存在一些 bug。
➡️

继续阅读