依赖项注入到ILogger对象中

时间:2020-05-29 17:23:27

标签: c# dependency-injection blazor-server-side ilogger

我有一个服务器端Blazor应用程序,我在其中实现ILogger对象以捕获未处理的应用程序错误并记录它们。您可以在这里的答案中看到我的操作方式: Processing unhandled exceptions in ASP.NET Core 3.1

我想做的是使用依赖注入将对象传递到ILogger对象中,以便它可以获得更多信息来记录有关异常的信息。但是我不知道该怎么做。我尝试将DI对象添加到ExceptionLoggerProvider和ExceptionLogger对象的构造函数中,但无法正常工作。有人可以举例说明如何做到这一点吗?

例如,我创建了一个LoginAccount DI类,该类跟踪我这样设置的登录用户,我希望将其注入到ILogger对象中。

services.AddScoped<LoginAccount>();

2 个答案:

答案 0 :(得分:0)

您需要在startup.cs服务对象中添加引用。

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

您添加或错过了吗?

答案 1 :(得分:0)

如果我正确理解了您的要求,则可以实施以下操作

Host.CreateDefaultBuilder(args)中添加Program.cs

using Microsoft.Extensions.Logging;


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

如果要在Model类中实现,则可以调用类似以下内容的

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.");

如果要在Controller中实现,则可以使用-

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

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

以类似的方式,您可以在Controller Actions中这样调用以记录信息-

_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