c# - 由于 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
}
}
解决方案
您需要在调用之前配置 ServiceCollection BuildServiceProvider
。
在您的情况下,您应该将该IServiceProvider serviceProvider = services.BuildServiceProvider();
行向下移动startup.ConfigureServices(services, logger);
推荐阅读
- php - 获得最高出价者
- spring-boot - 迁移 Java 和 Spring Boot
- python - 按中心裁剪图像
- postgresql - 无法获得容器之间的连接
- c# - 如何在 C# 中使用 Dapper 检查 SQLite DB 的完整性
- java - 使用 POI 下载的文件已损坏,并且不使用弹出窗口存储数据
- django - Django Rest Framework:如何为 PUT 和 PATCH 等更新操作设置必填字段/只读字段?
- amazon-web-services - 将 terraform 上的 jenkins 与 bitbucket 集成
- scala - 如何在案例类列表中查找字符串
- html - 将值设置到地图中