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

2023-12-28

我正在使用 .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>();

注意:我刚刚开始使用依赖注入、.NET Core,还不了解有关 DI 的一切。您的回答将会有很大的帮助。


通用的获取服务 https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceproviderserviceextensions.getservice?view=aspnetcore-2.2方法是一种扩展方法。这意味着您需要有:

using Microsoft.Extensions.DependencyInjection;

以允许编译器找到它。

此方法仅适用于optional服务。它会返回null如果无法构造对象,要么是因为类型未注册,要么是因为缺少某些依赖项。

获取所需服务 https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceproviderserviceextensions.getrequiredservice?view=aspnetcore-2.2当应用程序无法工作(除非服务可用)时应使用。如果无法创建实例,则会抛出 InvalidOperationException。

当抛出该异常时,完整的异常文本将是huge帮助找到实际问题。构造函数中抛出的异常可能出现在异常.InnerException https://learn.microsoft.com/en-us/dotnet/api/system.exception.innerexception?view=netframework-4.7.2财产。最终引发异常的调用序列将出现在堆栈跟踪 https://learn.microsoft.com/en-us/dotnet/api/system.exception.stacktrace?view=netframework-4.7.2财产。呼唤异常.ToString() https://learn.microsoft.com/en-us/dotnet/api/system.exception.tostring?view=netframework-4.7.2将返回一个字符串,其中包含all当前异常和任何内部异常的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐