Как добавить ведение журнала в серверный компонент Blazor?

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

Я пытаюсь создать размещенный ASP.net Приложение Blazor и попытка подключить регистратор к моему контроллеру.

У меня есть это:

 public MyController(ILogger logger) {
    _logger = logger;
    // more initialization
}
  

Но когда я запускаю его, я получаю:

 fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
      An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'MyApp.Server.Controllers.MyController'.
  

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

Как мне получить к этому доступ?

Ответ №1:

Не универсальный ILogger не зарегистрирован в коллекции сервисов. Вместо этого вы должны ввести общий ILogger<T> . Аргумент общего типа T используется для настройки имени категории, которое связано с экземпляром регистратора. Это позволяет вам легко увидеть, откуда пришел вызов журнала.

Обычно вы указываете тип, с которым вы используете регистратор, в качестве аргумента универсального типа. Итак, в вашем случае вы бы использовали ILogger<MyController> :

 public MyController(ILogger<MyController> logger)
{
    _logger = logger;
}
  

Обратите внимание, что в этом поведении Blazor на стороне сервера нет ничего особенного. Это стандарт ASP.NET Ядро и контроллер также являются обычным ASP.NET Основной контроллер.

Комментарии:

1. Ваш ответ довольно частичный и неполный и может быть неправильным, в зависимости от того, как вы собираетесь его завершить. Это не блейзор на стороне сервера. Это скорее Blazor на стороне клиента (размещенный Blazor). Конфигурации обоих типов (клиент или сервер) на сервере могут сильно отличаться друг от друга, например, серверный Blazor может определять свою собственную систему ведения журнала как часть использования SignalR, в то время как клиентский Blazor автоматически не предоставляет никакой поддержки ведения журнала, если вы не попросите об этом. Вы понимаете мою точку зрения? Чтобы сделать ваш ответ полным, предоставьте конфигурацию контейнера DI. Спасибо…

2. @Issac Если вы посмотрите на вопрос, вы увидите, что существует контроллер , нечто, что существует полностью за пределами Blazor (независимо от того, является ли это серверной или клиентской стороной). Итак, поскольку вопрос на самом деле не о Blazor, я полностью игнорирую его в своем ответе, за исключением замечания в конце.

3. Я удалил тег Blazor из своего первоначального вопроса. Поскольку я новичок в этом, я не мог отличить это, но теперь я знаю. Вы правы, мой вопрос касался входа в серверную часть размещенного Blazor, которая ASP.NET Ядро.