是的,C# 的 IServiceProvider
接口支持多种服务。IServiceProvider
是一个用于获取已注册服务的依赖注入容器。你可以通过调用 GetService
方法来获取不同类型的服务实例。
以下是一个简单的示例,展示了如何在 IServiceProvider
中注册和获取多种服务:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
// 定义两个服务接口
public interface IServiceA
{
string GetData();
}
public interface IServiceB
{
int Calculate(int number);
}
// 实现两个服务类
public class ServiceA : IServiceA
{
public string GetData()
{
return "Hello from ServiceA";
}
}
public class ServiceB : IServiceB
{
public int Calculate(int number)
{
return number * 2;
}
}
class Program
{
static async Task Main(string[] args)
{
// 创建服务容器并注册服务
var serviceProvider = new ServiceCollection()
.AddTransient<IServiceA, ServiceA>()
.AddTransient<IServiceB, ServiceB>()
.BuildServiceProvider();
// 获取服务实例
var serviceA = serviceProvider.GetService<IServiceA>();
var serviceB = serviceProvider.GetService<IServiceB>();
// 使用服务
Console.WriteLine(serviceA.GetData());
Console.WriteLine(serviceB.Calculate(5));
}
}
在这个示例中,我们定义了两个服务接口 IServiceA
和 IServiceB
,以及它们对应的实现类 ServiceA
和 ServiceB
。然后,我们创建了一个 ServiceCollection
实例,并使用 AddTransient
方法注册了这两个服务。最后,我们通过调用 BuildServiceProvider
方法创建了一个 IServiceProvider
实例,并使用它来获取服务实例。