aspnetcore如何依赖注入才能在控制器中自动注入Nlog.ILogger
时间: 2024-10-19 15:08:11 浏览: 40
在ASP.NET Core中,要让控制器自动注入`NLog.ILogger`,你需要在应用启动期间配置依赖注入(DI)并且设置好日志框架。以下是步骤:
1. **添加NLog包**:首先,在你的项目中安装NLog库。打开命令行,进入项目目录并运行:
```
dotnet add package NLog
```
2. **添加NLog相关文件**:在项目的Startup.cs或Program.cs中(取决于你选择的是基于Startup的结构还是程序集),添加NLog的相关配置。通常创建一个`NLog.config`文件,并在启动时读取配置。
```csharp
// Startup.cs (或Program.cs)
using NLog;
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// 注入ILoggerFactory
services.AddSingleton<ILoggerFactory, NLogProviderServices>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 配置NLog,如从appSettings读取配置
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
NLog.Config.ConfigureFromXmlString(app.Environment.ApplicationName, config.GetSection(NLogSectionNames.NLog));
// 将NLog集成到中间件
app.UseNLog();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
```
3. **在控制器中注入ILogger<T>**:现在在你的控制器类上,你可以直接使用泛型形式的`ILogger<T>`。例如,对于一个名为`MyController`的控制器,可以这样做:
```csharp
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
private readonly ILogger<MyController> _logger;
public MyController(ILogger<MyController> logger)
{
_logger = logger;
}
// 控制器方法...
[HttpGet]
public IActionResult Get()
{
_logger.LogInformation("Info log from controller");
return Ok();
}
}
```
这样,每次创建`MyController`实例时,`ILogger<MyController>`就会自动注入进去,你可以按照需要记录日志了。
阅读全文