【问题标题】:ASP.Net 5 Logging in Class Libraries类库中的 ASP.Net 5 日志记录
【发布时间】:2015-11-24 14:19:47
【问题描述】:

我对依赖注入有点陌生。我正在尝试开始使用 ASP.NET 5,并且正在努力弄清楚如何在我的 ASP.NET 5 类库中使用服务。尤其是日志记录和 EF 数据访问等简单的事情。

例如,我已按照此处的指南进行操作: http://docs.asp.net/en/latest/fundamentals/logging.html

这使我能够登录主应用程序。然后如何在我的类库中输出日志事件?

我知道从类库中引用主应用程序是一种不好的做法,我想弄清楚如何正确地做到这一点。

【问题讨论】:

  • 你只需要在 ILogger 上建立一个构造函数依赖,然后一直使用依赖注入。 This question 可以帮到你
  • 太完美了。这是您最后关于将其添加为服务的评论。我无法摆脱“更新”我的课程...我不会展示如何为您提供此评论的声誉?
  • 很高兴有帮助。你可以对我链接的问题的答案投票,这会给我一些代表点
  • 我已经做到了@JoeAudette 再次感谢您!

标签: asp.net-core


【解决方案1】:

通过在构造函数中传递ILogger<YourClass> 为您的类创建一个记录器,就像在示例中一样:

public class MyClass : IMyClass
{
     private readonly ILogger<MyClass> _logger;

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

    public void MyMethod()
    {
        _logger.LogInformation("a log");
    }
}

或者传递一个ILoggerFactory

public class MyClass: IMyClass
{
     private readonly ILogger _logger;

     public (ILoggerFactory loggerFactory)
     {
        _logger = loggerFactory.CreatLogger("MyClass");
      }

    public void MyMethod()
    {
        _logger.LogInformation("a log");
    }
}

并通过Dependency Injection解决您的课程:

services.AddTransient<IMyClass, MyClass>();

然后你可以在你的控制器中使用它:

[Route("api/[controller]")]
public class TodoController : Controller
{
    private readonly IMyClass _myClass;
    private readonly ILogger<TodoController> _logger;

    public TodoController(IMyClass myClass, 
        ILogger<TodoController> logger)
    {
        _myClass = myClass;
        _logger = logger;
    }
}

【讨论】:

  • 嗨,这就是我所做的。但是,我该如何调用该类,因为它告诉我必须提供 ILogger 参数?
  • 通过Dependency Injection解决。我更新我的答案
  • 完美。就是这样。谢谢
  • 如果我不想或不能使用 DI 怎么办,我怎么还能访问 logger?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多