首页 > 其他分享 >.NET 8最强新功能:键控服务依赖注入

.NET 8最强新功能:键控服务依赖注入

时间:2023-12-25 12:44:38浏览次数:22  
标签:依赖 serviceProvider 键控 最强 NET public 注入

什么是键控服务依赖注入?

在之前的依赖注入中,服务是根据其类型进行注册和解析的。如果出现同一接口有多个实现怎么办呢?这时候就可以使用.NET 8的新功能“键控服务依赖注入”。它允许您注册接口的多个实现,每个实现都与一个唯一键相关联,然后基于该键解析所需的实现。

在.NET 8 中的实现

接下来介绍如何在APS.NET Core中使用键控服务依赖注入。案例将准备一个接口,并且这个接口有两个类实现,最后使用键控服务依赖注入。步骤如下:

1、首先创建一个.NET8的ASP.NET Core项目。这里选择Web API项目

2、创建一个接口和两个类实现。代码如下:

  public interface IStorage
  {
      void StoreData(string data);
  }

  public class LocalStorage : IStorage
  {
      public void StoreData(string data)
      {
          Console.WriteLine("方法1: " + data);
      }
  }

  public class CloudStorage : IStorage
  {
      public void StoreData(string data)
      {
          Console.WriteLine("方法2: " + data);
      }
  }

3、接下来我们在Program.cs使用键控服务注册。代码如下:

builder.Services.AddKeyedSingleton<IStorage, LocalStorage>("Fun1");
builder.Services.AddKeyedSingleton<IStorage, CloudStorage>("Fun2");

4、在所需的控制器中使用构造函数注入。代码如下:

private readonly IServiceProvider _serviceProvider;
public WeatherForecastController( IServiceProvider serviceProvider)
 {
     _serviceProvider = serviceProvider;
 }
 //调用控制器使用微软创建的默认控制器

5、在方法中调用两个实现。代码如下:

var storage = _serviceProvider.GetRequiredKeyedService<IStorage>("Fun1");
storage.StoreData("欢迎关注公众号:DOTNET开发跳槽");
var storage2 = _serviceProvider.GetRequiredKeyedService<IStorage>("Fun2");
storage2.StoreData("欢迎关注公众号获取全真面试题");

6、运行网站查看效果。如下:

是否支持.NET7呢?小编把项目改成.NET7后报错了。如下:

结语

.NET 8键控服务依赖项注入功能弥补了之前版本接口不能多个实现的缺陷。键控服务依赖项注入提供了一种强大的机制来管理和解析接口的多个实现。它允许开发人员根据提供的密钥选择特定的实现,从而实现更灵活、更高效的应用程序设计。希望本文对大家有所帮助,大家对.NET 8键控服务依赖项注入有什么看法,欢迎留言讨论。

参考:

1、c-sharpcorner.com/article/keyed-dependency-injection-in-net-8/

2、learn.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0

推荐阅读

1、.NET 8使用牛逼的AOT发布ASP.NET Core应用

2、.NET 8 中的调试增强功能

来源公众号:DotNet开发跳槽❀    

标签:依赖,serviceProvider,键控,最强,NET,public,注入
From: https://www.cnblogs.com/xbhp/p/17925852.html

相关文章

  • 从Redis读取.NET Core配置
    在本文中,我们将创建一个自定义的.NETCore应用配置源和提供程序,用于从Redis中读取配置。在此之前,您需要稍微了解一些.NETCore配置提供程序的工作原理,相关的内容可以在Microsoft开发者官网搜索到。另外您可能还需要了解一些Redis的基础知识,比如Redis的基础数据类型,持久化等等。一......
  • netstat命令
    显示网络状态语法格式:netstat参数常用参数-a显示所有连接中的接口信息-n直接使用ip地址,而不是域名-A设置网络连接类型-N显示网络硬件外围设备的符号链接名称-c持续显示网络状态-o显示计时器数据信息-C显示路由配置信息-p显示正在使用接口的程序识别......
  • 记一次 .NET某工控 宇宙射线 导致程序崩溃分析
    一:背景1.讲故事为什么要提宇宙射线,太阳耀斑导致的程序崩溃呢?主要是昨天在知乎上看了这篇文章:莫非我遇到了传说中的bug?,由于rip中的0x41变成了0x61出现了bit位翻转导致程序崩溃,截图如下:下面的评论大多是说由于宇宙射线,这个太玄乎了,说实话看到这个传说bug的提法,我还......
  • 强大的VS插件CodeRush全新发布v23.2——支持并发.NET类型
    CodeRush是一个强大的VisualStudio.NET插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验。CodeRush能帮助你以极高的效率创建和维护源代码。Consume-first申明,强大的模板,智能的选择工具,智能代码分析和创新的导航以及一个无与伦比的重构集,在它们的帮助下能够大大的......
  • 2024年 Kubernetes 四大趋势预测
    Kubernetes在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战。Kubernetes最大的吸引力之一在于其可扩展性和跨环境的广泛用例。但是,强大的灵活性也带来了复杂性。Kubernetes用户......
  • 【C#】.net core 6.0 通过依赖注入注册和使用上下文服务
    给自己一个目标,然后坚持一段时间,总会有收获和感悟!请求上下文是指在Web应用程序中处理请求时,包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关的数据。目录一、DbContext1.1、创建自定义类1.2、注册......
  • 2024年 Kubernetes 四大趋势预测
    Kubernetes在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战。Kubernetes最大的吸引力之一在于其可扩展性和跨环境的广泛用例。但是,强大的灵活性也带来了复杂性。Kubernetes用户......
  • 小技巧-- 断网恢复(未识别网络-无internet访问权限)
    配置host(解决延迟高问题) 安装java,配置环境变量,直接系统path中bin地址就行,不行就往上面移动 win开机启动Win+R打开运行,输入:shell:startupcalc  打开计算器powercfg/batteryreport 查看电池健康程度 netstat-anotasklist 列出进程 |findstr查询端口......
  • 各版本操作系统对.NET支持情况(2023-11-24更新)
     各版本操作系统对.NET支持情况(1124更新)(newlifex.com) 各版本操作系统对.NET支持情况(1124更新)借助虚拟机和测试机,检测各版本操作系统对.NET的支持情况。安装操作系统后,实测安装相应运行时并能够运行星尘代理为通过。 测试平台:VMwareWorkstation镜像来源:MSDNI......
  • .net core中如何自定义静态文件目录、默认主页、和文件浏览目录?
    在.NETCore中,UseStaticFiles、UseDefaultFiles、UseDirectoryBrowser和UseFileServer中间件用于处理静态文件和目录浏览。下面我将为你提供一个简单的例子,演示它们的用法。首先,确保你的项目已经安装了Microsoft.AspNetCore.StaticFiles NuGet包,因为这是这些中间件的依赖。dotn......