说说KeyedService

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

在.NET 8中,引入了KeyedService,用自定义关键字来使用服务。通过命名关键字来区分注入的多个接口子类,并在使用时调用。示例中,INotifyService接口有两个子类,SMSService和EMailService,它们调用不同的Respository。还介绍了使用类SMS和EMail,以及另一种简化的写法。总体而言,对于KeyedService的使用感觉有限制,希望在正式版本中有所改善。

🎯

关键要点

  • .NET 8引入了KeyedService,允许使用自定义关键字来区分多个接口子类的注入。
  • INotifyService接口有两个子类:SMSService和EMailService,它们分别调用不同的Repository。
  • 使用特性[FromKeyedServices]来指定关键字,但不能直接在app.Map方法中使用。
  • 可以通过AddScoped方式注入SMS和EMail类,并使用AddKeyedScoped注册服务。
  • 提供了错误的写法示例,说明如何不正确地使用KeyedService。
  • 另一种简化写法是通过AddSingleton注入,并使用app.Services.GetRequiredKeyedService获取服务。
  • 使用KeyedService的体验有限,存在一些限制,希望在正式版本中得到改善。
➡️

继续阅读