Вам необходимо провести рефакторинг контроллера, чтобы он ожидал универсального логгера ILogger<T>
, который получен из ILogger
[Route("api/[controller]")]
public class TraderController : Controller {
private TraderService _service;
private readonly ILogger _logger;
public TraderController(
Func<IBemfeitoDataContext> context,
ILogger<TraderController> logger //<-- note the change here
) {
_service = new TraderService(context, logger);
_logger = logger;
}
}
ILogger<>
отображается на Logger<>
, когда .AddLogging()
вызывается в CreateDefaultBuilder
. ILogger
не зарегистрирован непосредственно в коллекции услуг.
После того, как это было сделано, текущий выбор конструкции связи контроллера с проблемами реализации (т. Е. TraderService
) стал причиной некоторой озабоченности.
исходя из того, как используется текущий код
public class TraderService : ITraderService {
private readonly ILogger logger;
public TraderService(Func<IBemfeitoDataContext> context, ILogger logger) {
this.logger = logger;
//...
}
//...code removed for brevity
}
услуга также должна быть исправлена в зависимости от ILogger<T>
public class TraderService : ITraderService {
private readonly ILogger logger;
public TraderService(Func<IBemfeitoDataContext> context, ILogger<TraderService> logger) {
this.logger = logger;
//...
}
//...code removed for brevity
}
и контроллер должен быть реорганизован в зависимости от абстракции службы, а не от реализации.
[Route("api/[controller]")]
public class TraderController : Controller {
private readonly ITraderService service;
private readonly ILogger logger;
public TraderController(ITraderService service, ILogger<TraderController> logger) {
this.service = service;
this.logger = logger;
}
//...
}
Все участвующие классы получат свои зависимости в явном виде при разрешении.
В этом ответе предполагается, что ITraderService
и TraderService
зарегистрированы в контейнере DI.