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

发布时间 2023-12-25 12:42:40作者: 翔星

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

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