我有一个测试项目,在其中设置了一个如下所示的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类不是使用新的WebHostBuilder()调用创建的服务器的控制器,因此它不受依赖注入容器的管理。
我还尝试公开了app.serviceProvider,然后使用this.ServiceProvider.GetService(typeof(ILogger));
,但是它返回null。
我只是无法从测试TestServer的类中获得控制台记录器
答案 0 :(得分:0)
为了使用以.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