我正在使用.NET Core依赖注入,但是当我尝试在另一个类中获取服务时,会出现“IServiceProvider.GetService(Type)”不能与类型参数一起使用的错误。
这个错误意味着什么? 我理解通用类型参数类似于这样:GenericInterface<>,而GetService方法不接受GenericInterface<>作为参数。
我为什么会遇到这个错误,如何解决?
接口
public interface IService
{
void Process();
}
实现该接口的类。public class Service : BaseService<IConfig, SomType>
{
public Service(
ILogger logger : base(logger)
{
}
...
}
BaseService类是一个抽象类,它实现了IService接口。
public abstract class BaseService<TConfig, TE> : AnotherBaseService, IService where TConfig : IConfig where TE : struct, IConvertible
{
protected BaseService(ILogger logger): base(logger)
{
}
...
}
另一个基础服务public abstract class BaseService
{
protected readonly ILogger Logger;
protected BaseService(ILogger logger)
{
Logger = logger;
}
...
}
我是如何注册它们的。
serviceCollection.AddScoped<IService, Service>();
我如何获取我需要的服务。
var incoming = serviceProvider.GetService<IService>();
NB: 我刚开始接触依赖注入和 .NET Core,对 DI 还不了解所有内容。你的回答将对我有很大帮助。
GetRequiredService< T>
。如果服务注册丢失,GetRequiredService 将抛出一个异常来解释原因。有时很明显(服务未注册或构造函数抛出异常),有时则不然。 - Panagiotis Kanavos