将ILogger传递到.net核心控制台中的DI中导致服务未注册错误

时间:2019-01-14 20:26:19

标签: c# dependency-injection .net-core serilog

我有既可以在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>>();

0 个答案:

没有答案
相关问题