Как настроить ведение журнала на веб-хосте, смонтированном с помощью Host.CreateDefaultBuilder - PullRequest
2 голосов
/ 06 ноября 2019

Я адаптирую следующий метод WebHost.CreateDefaultBuilder, который работает, в метод, основанный на Host.CreateDefaultBuilder, чтобы я мог использовать метод расширения UseWindowsService .

// WORKING
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
    .ConfigureLogging((hostingContext, logging) =>
    {
      ...
    })
    .UseStartup<Startup>();
}

КогдаЯ пытаюсь адаптировать это ...

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureLogging((hostingContext, logging) =>
    { // tried here
      ...
    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
      webBuilder.ConfigureLogging((hostingContext, logging) =>
        { // tried here too
          ...
        });
        .UseStartup<Startup>();
    });

Я получаю следующую ошибку ...

Невозможно разрешить службу для типа 'Microsoft.Extensions.Logging.ILoggerFactory', покапопытка активировать 'MyProject.Startup'.

Как правильно настроить регистрацию здесь?

1 Ответ

1 голос
/ 06 ноября 2019

Ссылка Запуск приложения в ASP.NET Core

В конструкторе Startup могут использоваться только следующие типы служб при использовании общего хоста (IHostBuilder):

  • IWebHostEnvironment
  • IHostEnvironment
  • IConfiguration

В то время как ваш связанный Startup, кажется, вводит за пределыразрешенные сервисы.

public Startup(ILoggerFactory loggerFactory)
{
  this._Factory = loggerFactory;
  this._Logger = loggerFactory.CreateLogger<Startup>();
}

На основе связанного кода Startup регистратор, по-видимому, не используется, и одна ссылка на регистратор закомментирована, поскольку основана на контексте его использования. , это не нужно.

Я бы предложил убрать инжекцию ILoggerFactory из Startup конструктора как часть рефакторинга в более новую версию фреймворка.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...