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

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

在之前的依赖注入中,服务是根据其类型进行注册和解析的。如果出现同一接口有多个实现怎么办呢?这时候就可以使用.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开发跳槽❀    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/298921.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python:巧用语法糖,给代码加点甜

文章目录 1.关于python语法糖2.装饰器3.列表推导式4.生成器表达式5.条件表达式6.迭代器和生成器7.上下文管理器8.函数参数解包9.总结Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼…

如何做好电商?利用“让利思维”抱团取暖商家互利互惠共赢之策

如何做好电商&#xff1f;利用“让利思维”抱团取暖商家互利互惠共赢之策 引言&#xff1a;别再听信什么微商了&#xff0c;越来越多人呢&#xff1f;被互联网上消费市场的各种商业模式&#xff0c;割怕了&#xff01;有钱的不敢消费了&#xff0c;拓客引流越来越难&#xff0c…

Python中最常用的10个内置函数!

文章目录 前言1. print()2. len()3. input()4. range()5. list(), tuple(), dict()6. max() 和 min()7. sum()8. abs()9. sorted()10. type()Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Pyt…

使用Java语言统计一行字符串的数据

方法 创建字符串接收器&#xff0c;接收用户输入的字符串&#xff0c;然后将其转换为字符串数组&#xff0c;安装字符对应的字节码进行判断。 代码 import java.io.*; public class StaticsChar {public static void main(String[] args) throws IOException{String zifuch…

【Prometheus|报错】Out of bounds

【背景】进入Prometheus地址的9090端口&#xff0c;pushgateway&#xff08;0/1&#xff09;error : out of bounds 【排查分析】 1、out of bounds报错&#xff0c;是由于Prometheus向tsdb存数据出错&#xff0c;与最新存数据的时间序列有问题&#xff0c;有可能当前时间与最…

OAuth2授权码模式---详解

OAuth2简介 是一个业界标准的授权协议&#xff08;authorization protocol&#xff09;&#xff0c;这里的授权是以委派代理&#xff08;delegation&#xff09;的方式。可以这样理解&#xff0c;OAuth 2.0提供一种协议交互框架&#xff0c;让某个应用能够以安全地方式获取到用…

基于SpringBoot实现一个可扩展的事件总线

基于SpringBoot实现一个可扩展的事件总线 前言 在日常开发中&#xff0c;我们经常会用到事件总线&#xff0c;SpringBoot通过事件多播器的形式为我们提供了一个事件总线&#xff0c;但是在开发中我们经常会用到其他的实现&#xff0c;比如Guava、Disruptor的。我们将基于Spri…

Webpack基础使用

目录 一.什么是Webpack 二.为什么要使用Webpack 三.Webpack的使用 1.下载yarn包管理器 2.Webpack的安装 3.Webpack的简单使用 4.效果 四.Webpack打包流程 一.什么是Webpack Webpack是一个静态模块打包工具 二.为什么要使用Webpack 在开发中&#xff0c;我们常常会遇到…

多媒体领域顶会ACM MM 2023 闭幕,获奖论文一览!

多媒体领域顶会 国际多媒体会议&#xff08;The 31th ACM International Conference on Multimedia&#xff0c;ACM MM&#xff09;于2023年10月28日至11月3日在加拿大渥太华举行&#xff0c;该会议是计算机图形学与多媒体领域顶级会议&#xff0c;被中国计算机学会列为A类会议…

[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce wp 参考博客&#xff1a;https://www.cnblogs.com/bkofyZ/p/17644820.html 代码审计 题目的代码如下&#xff1a; <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(is…

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项&#xff08;ffmpeg&#xff09;总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个&#xff1a; 一、基本情况 这次爬取的方…

PSoc62™开发板之按键控制LED

实验目的 使用板子上的用户自定义按键控制LED亮灭&#xff0c;当按键按下时LED亮起来&#xff0c;不按下则不亮 电路图 按键电路 板子有两组按键&#xff0c;分别是系统复位按键和用户自定义按键&#xff0c;这里我们选择控制用户自定义按键&#xff0c;可以看到MCU_USER_B…