首页 > 解决方案 > 由于 serviceProvider.GetService 无法添加单例服务() 返回空值

问题描述

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

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

#程序.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
    }
}

标签: c#.net-coredependency-injectionrabbitmqasp.net-core-3.1

解决方案


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

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


推荐阅读