📌  相关文章
📜  非泛型方法“IServiceProvider.GetService(Type)”不能与类型参数一起使用 (1)

📅  最后修改于: 2023-12-03 15:42:26.398000             🧑  作者: Mango

非泛型方法"IServiceProvider.GetService(Type)"不能与类型参数一起使用

当使用 IServiceProvider.GetService(Type) 方法时,如果传递的参数包含类型参数,将会出现上述错误提示。

IServiceProvider.GetService(Type) 方法用于检索指定类型的服务对象。该方法实现在服务实现类中,而这些服务实现类通常使用 System.IServiceProvider 接口作为依赖注入系统的基础。

以下是 IServiceProvider.GetService(Type) 方法的签名:

object GetService(Type serviceType);

因为此方法是非泛型方法,所以无法与类型参数一起使用。如果需要使用类型参数,则应使用泛型版本的 GetService<T> 方法。

以下是 IServiceProvider.GetService<T> 方法的签名:

T GetService<T>();

该方法返回指定类型的服务对象,如果服务未注册,将返回 null。

可以看出,IServiceProvider.GetService<T> 方法是泛型方法,能够传递类型参数,并能够返回指定类型的服务对象,而且不会出现上述错误提示。

如果您需要检索多个服务,请将实现类作为服务的集合注册,并使用如下代码进行检索:

IEnumerable<MyService> services = serviceProvider.GetServices<MyService>();

这里用到了泛型方法 IServiceProvider.GetServices<T>,其返回类型为集合类型。注意,要使用 GetServices<T>方法,服务实现类需要以集合的形式进行注册,可以使用以下代码进行注册:

services.AddSingleton<IEnumerable<MyService>, List<MyService>>();

以上便是关于 "非泛型方法"IServiceProvider.GetService(Type)"不能与类型参数一起使用" 的介绍。