Внедрение зависимости в объект ILogger - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение Blazor на стороне сервера, в котором я реализую объект ILogger для перехвата необработанных ошибок приложения и их регистрации. Вы можете увидеть, как я это сделал, в моем ответе здесь: Обработка необработанных исключений в ASP. NET Core 3.1

Я бы хотел использовать инъекцию зависимостей для передачи в мой объект ILogger, чтобы он мог получить больше информации для регистрации исключения. Но я не могу понять, как это сделать. Я попытался добавить объекты DI в конструктор объектов ExceptionLoggerProvider и ExceptionLogger, но не смог заставить это работать. Может ли кто-нибудь предоставить пример того, как это сделать?

Например, у меня есть созданный мной класс LoginAccount DI, который отслеживает зарегистрированного пользователя, которого я настроил таким образом, который я хотел бы ввести в свой объект ILogger .

services.AddScoped<LoginAccount>();

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Если я правильно понял ваше требование, вы можете реализовать что-то вроде этого:

Добавить Host.CreateDefaultBuilder(args) в Program.cs

using Microsoft.Extensions.Logging;


        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

Если вы реализуете в классе модели, вы можете вызовите что-то вроде этого -

private readonly ILogger<RegisterModel> _logger;

public class YourModel : PageModel
{
    private readonly ILogger<YourModel> _logger;

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

И вы можете вызвать это внутри своих действий / методов для регистрации информации. Вы также можете передать объект исключения / события.

_logger.LogInformation("Log your info here.");

Если вы реализуете в Контроллере, вы можете использовать что-то вроде -

public class YourController : Controller
{
    private readonly ILogger<YourController> _logger;

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

И аналогичным образом вы можете вызвать это внутри Действия вашего контроллера для регистрации информации -

_logger.LogInformation("Log your info here");

Чтобы переопределить набор поставщиков ведения журнала по умолчанию, добавленных Host.CreateDefaultBuilder, вызовите ClearProviders и добавьте необходимых поставщиков ведения журнала. Например, следующий код в Program.cs:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddConsole();  //you can pass any third party logging provider here
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Для получения дополнительной информации см. docs .

0 голосов
/ 29 мая 2020

Вам необходимо добавить ссылку в служебный объект startup.cs.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IDataAccess, DataAccess>();
}

Это вы добавили или пропустили?

...