C# 非泛型方法&x27;IServiceProvider.GetService(类型)和#x27;不能与类型参数一起使用
我使用的是.NET核心依赖项注入,但当我尝试在另一个类中获取服务时,会出现“IServiceProvider.GetService(Type)”无法与类型参数一起使用的错误 这个错误意味着什么? 我知道泛型类型参数是这样的:GenericInterface,GetService方法不将GenericInterface作为参数 为什么我会出现这个错误?我该如何解决它 接口C# 非泛型方法&x27;IServiceProvider.GetService(类型)和#x27;不能与类型参数一起使用,c#,.net-core,console-application,dependency-inversion,C#,.net Core,Console Application,Dependency Inversion,我使用的是.NET核心依赖项注入,但当我尝试在另一个类中获取服务时,会出现“IServiceProvider.GetService(Type)”无法与类型参数一起使用的错误 这个错误意味着什么? 我知道泛型类型参数是这样的:GenericInterface,GetService方法不将GenericInterface作为参数 为什么我会出现这个错误?我该如何解决它 接口 public interface IService { void Process(); } public class
public interface IService
{
void Process();
}
public class Service : BaseService<IConfig, SomType>
{
public Service(
ILogger logger : base(logger)
{
}
...
}
实现接口的类
public interface IService
{
void Process();
}
public class Service : BaseService<IConfig, SomType>
{
public Service(
ILogger logger : base(logger)
{
}
...
}
我是怎么注册的
serviceCollection.AddScoped<IService, Service>();
serviceCollection.addScope();
我如何得到我需要的服务
var incoming = serviceProvider.GetService<IService>();
var incoming=serviceProvider.GetService();
注意:我刚刚开始使用依赖注入、.NETCore,还不完全了解DI。你的回答将大有帮助 这意味着您的编译器只知道采用类型的方法 你可以打电话
var incoming = serviceProvider.GetService(typeof(IService));
或者你可以加一个
using Microsoft.Extensions.DependencyInjection;
确保编译器知道允许您将类型指定为泛型参数的扩展方法。这可能需要安装包Microsoft.Extensions.DependencyInjection.Abstractions。通用方法是一种扩展方法。这意味着您需要有:
using Microsoft.Extensions.DependencyInjection;
允许编译器找到它
此方法仅适用于可选服务。如果由于类型未注册或缺少某些依赖项而无法构造对象,则它将返回null
应在应用程序无法工作时使用,除非服务可用。如果无法创建实例,它将抛出InvalidOperationException
当抛出该异常时,完整的异常文本将大大有助于发现实际问题。构造函数中抛出的异常可以出现在属性中。在抛出异常时结束的调用序列将显示在属性中。调用将返回一个字符串,该字符串包含当前异常和任何内部异常的所有信息。简短回答在上面的帖子中有很好的解释:
ServiceProvider.GetService<T>();
另外请注意,如果在此之后出现null异常,则可能会出现多个问题:
**我开始写完全相同的答案,但你更快了:-)@nvoigt谢谢,这有效了,我现在在获得服务时出现了一个空异常错误。你知道是什么引起的吗?它起作用了,但我现在有一个空异常。您能帮忙吗?@Cookie这意味着该类型未注册或无法构造。如果应用程序无法使用特定的服务,请使用
GetRequiredService
。如果服务注册丢失,GetRequiredService将抛出一个解释原因的异常。有时很清楚(服务未注册或构造函数被抛出),有时not@Cookie为了帮助处理您的具体案例,您必须发布再现问题的代码。如果您尝试GetRequiredService
发布由exception.ToString()返回的完整异常文本
感谢您的快速回复@Panagiotis Kanavos。我找到了原因,出现空异常是因为“服务”正在使用的服务尚未注册。这很有效,谢谢。出于某种原因,intellisense没有给我暗示
using Microsoft.Extensions.DependencyInjection;