我有既可以在ASP.NET Core 2.2中使用的服务,又可以在.NET Core 2.2控制台应用程序中使用的服务。仅供参考,如果有任何区别,我正在配置中使用Serilog
要引用/使用的类
public RabbitMq(ILogger<RabbitMq> logger, ...)
{
...
this.logger = logger;
}
ASP.NET CORE Startup.cs
ASP.NET CORE中的所有工作
var busConfig = Configuration.GetSection("RabbitMQ").Get<RabbitMqConf>();
services.AddSingleton<IEventBus, RabbitMq>(x =>
{
var logger = x.GetRequiredService<ILogger<RabbitMq>>();
return new RabbitMq(logger, busConfig.Host, busConfig.Username, busConfig.Password, busConfig.Queue, busConfig.RetryCount);
});
如您所见,我可以使用.GetRequiredService<ILogger<RabbitMq>>
,它可以正确地带回记录器以传递到ctor
的{{1}}
.NET Core 2.2 控制台应用程序错误
System.InvalidOperationException:'没有针对类型的服务 “ Microsoft.Extensions.Logging.ILogger`1 [RabbitMQ.RabbitMq]”已被 已注册。”
在这一行RabbitMq
var logger = x.GetRequiredService<ILogger<RabbitMq>>();