Не удалось разрешить службу для типа "WorkerService Docker .ILogger" при попытке активировать "WorkerService Docker .Worker". " - PullRequest
1 голос
/ 29 марта 2020

Я изучаю использование. NET Ядра для создания «работника» (что я бы назвал современной реализацией службы windows, которая является моим опытом -. NET Framework / Windows Сервисы ). Я действительно новичок в Io C и DI.

Я создал. NET Core Worker и создал реализацию записи NLog в CloudWatch с кодом, приведенным ниже (в моем классе Logger.cs)

public interface ILogger
{
    void LogError(string message);
    void LogError(string message, Exception exception);
    void LogInformation(string message);
}

public class Logger : ILogger
{
    private static readonly NLog.Logger _logger = LogManager.GetCurrentClassLogger();

    public Logger(IConfiguration appSettings)
    {

        var awsTarget = new AWSTarget()
        {
            LogGroup = appSettings["Logging:TargetCloudWatchGroup"],
            Region = appSettings["App:AwsRegion"],
            Credentials = new Amazon.Runtime.BasicAWSCredentials(
                appSettings["App:AwsAccessKey"],
                appSettings["App:AwsSecretKey"]),
            Layout = new SimpleLayout
            {
                Text = "${longdate} ${level:uppercase=true} ${machinename} ${message} ${exception:format=tostring}"
            }
        };

        var config = new LoggingConfiguration();
        config.AddTarget("aws", awsTarget);
        config.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, awsTarget));
        LogManager.Configuration = config;
    }

    public void LogError(string message)
    {
        _logger.Error(message);
    }

    public void LogError(string message, Exception exception)
    {
        _logger.Error(exception, message);
    }

    public void LogInformation(string message)
    {
        _logger.Info(message);
    }
}

Однако, когда я пытаюсь выполнить мой рабочий в режиме отладки, при запуске происходит сбой со следующей ошибкой:

enter image description here

Я подозреваю, что это ошибка, потому что я не зарегистрировал ILogger / Logger как некую услугу и т. д. c, используя DI, в раздел CreateHostBuilder (). Однако мне неясно, как на самом деле зарегистрировать мой регистратор. Есть много доступных вариантов, и я не уверен, что они будут работать (например, AddSingleton, AddLogging, AddHostedService и так далее). Мне не повезло, пробуя это, поэтому я надеялся, что кто-нибудь может помочь, если это возможно, с тем, как я на самом деле впрыскиваю свой регистратор в работника, и зачем это делать именно так, как указано c. Заранее спасибо.

...