ASP.Net 5 登录类库

don*_*y80 5 asp.net-core

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

例如,我已遵循此处的指南: http: //docs.asp.net/en/latest/fundamentals/logging.html

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

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

agu*_*ars 5

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

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

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

    public void MyMethod()
    {
        _logger.LogInformation("a log");
    }
}
Run Code Online (Sandbox Code Playgroud)

或者传递一个ILoggerFactory

public class MyClass: IMyClass
{
     private readonly ILogger _logger;

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

    public void MyMethod()
    {
        _logger.LogInformation("a log");
    }
}
Run Code Online (Sandbox Code Playgroud)

并通过依赖注入解析你的类:

services.AddTransient<IMyClass, MyClass>();
Run Code Online (Sandbox Code Playgroud)

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

[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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我不想或不能使用 DI,我怎样才能访问记录器? (3认同)