[英]netcore: create a console logger using LoggerBuilder from a test controller
我有一個測試項目,我在其中設置了一個 http 客戶端,如下所示:
public class TestContext : IDisposable
{
private TestServer _server;
public HttpClient Client { get; private set; }
public TestContext() {
SetUpClient();
}
private void SetUpClient()
{
_server = new TestServer(new WebHostBuilder()
.ConfigureAppConfiguration((builderContext, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.UseStartup<Startup>()
.ConfigureServices( services => {
// ...
})
);
Client = _server.CreateClient();
}
}
使用待測試項目的Startup類。
在我的基礎 TestController 中,我正在實例化一個控制台記錄器,如下所示:
public WSTestController() {
_log = new LoggerFactory().AddConsole().CreateLogger(this.GetType().Name);
var testContext = new TestContext();
_client = testContext.Client;
// _services = testContext.Services;
}
現在我收到以下警告:
controllers\WSTestController.cs(22,20): warning CS0618:
'ConsoleLoggerExtensions.AddConsole(ILoggerFactory)' is obsolete:
'This method is obsolete and will be removed in a future version.
The recommended alternative is AddConsole(this ILoggingBuilder builder).'
我無法使用 DI 獲取記錄器,知道如何使用構建器而不是即將棄用的 LoggerFactory 嗎???
——
我嘗試使用@max-brodin 回答,但出現以下錯誤:
The following constructor parameters did not have matching fixture data: ILogger log
我猜是因為類 WSTestController 不是使用 new WebHostBuilder() 調用創建的服務器的控制器,所以它不是由 de 依賴注入容器管理的。
我也嘗試公開 app.serviceProvider 然后使用this.ServiceProvider.GetService(typeof(ILogger));
但它返回空值。
我只是無法從測試 TestServer 的類中獲取控制台記錄器
為了使用從 .Net Core 2.2 開始的 DI 解析ILogger<>
,您應該使用ConfigureLogging
擴展方法使用 loggerbuilder 注冊它:
_server = new TestServer(new WebHostBuilder()
.ConfigureAppConfiguration((builderContext, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.UseStartup<Startup>()
.ConfigureServices( services => {
// ...
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConsole();
})
);
然后你可以像往常一樣將它注入你的控制器。
public class WSTestController : Controller
{
private readonly ILogger<WSTestController> _logger;
public WSTestController(ILogger<WSTestController> logger)
{
_logger = logger;
}
}
查看詳情: https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.