📅  最后修改于: 2023-12-03 15:42:26.398000             🧑  作者: Mango
当使用 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)"不能与类型参数一起使用" 的介绍。