由于 serviceProvider.GetService<IRabbitMQConsumer>() 返回 null,无法添加单例服务

Unable to add a singleton service due to serviceProvider.GetService<IRabbitMQConsumer>() returning null

我正在尝试将 IRabbitMQConsumer 中提到的类型和 RabbitMQConsumer 中的实现类型的单例服务添加到 Iservicecollection。 但是当我尝试使用以下方法时,我收到空引用异常,因为 GetService 正在返回空值。

这段代码在我使用 .Net core 2.2 时有效,但在我迁移到 .Net core 3.1.12 时出现问题。我已经尝试了很多堆栈溢出线程,如下所示,它似乎是正确的,但不确定为什么我的代码会抛出异常。 , 请在下面找到我的代码并帮助我解决这个问题,因为我是这些中间件的初学者。

#Program.cs

internal class Program
{
    private static void Main(string[] args)
    {
        IServiceCollection services = new ServiceCollection();
        IServiceProvider serviceProvider = services.BuildServiceProvider();

        Startup startup = new Startup();
        startup.ConfigureServices(services, logger);

        //configure console logging
        serviceProvider.GetService<ILoggerFactory>();
        var logger = serviceProvider.GetService<ILoggerFactory>(); // logger returns null

        //do the actual work here
        var client = serviceProvider.GetService<IRabbitMQConsumer>(); // client returns null
        client.CreateConnection();
        client.ProcessMessages();

    }
}

#startup.cs

 public class Startup
{
    private static readonly Logger _log = LogManager.GetCurrentClassLogger();
    IConfigurationRoot Configuration { get; }
    public Startup()
    {
        LogManager.LoadConfiguration(string.Concat(Directory.GetCurrentDirectory(), "/NLog.config"));
       
    }

    public void ConfigureServices(IServiceCollection services, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddNLog(); // System.NullReferenceException
        services.AddSingleton<IRabbitMQConsumer, RabbitMQConsumer>();// System.NullReferenceException
    }
}

您需要在调用 BuildServiceProvider 之前配置 ServiceCollection。

在您的情况下,您应该将 IServiceProvider serviceProvider = services.BuildServiceProvider(); 行向下移动到 startup.ConfigureServices(services, logger);

下面