Создание базового контроллера для ядра ASP.NET для ведения журнала, но что-то не так с моей подписью конструктора? - PullRequest
1 голос
/ 06 ноября 2019

Я хочу иметь простой способ, чтобы все контроллеры веб-API автоматически регистрировали свои действия, не сообщая об этом явно. Почему это неправильно? Кроме того, есть ли лучшие способы?

 public class BaseController<T> : ControllerBase where T: BaseController<T>
{
    private readonly IAppLogger<T> _logger;

    public BaseController(IAppLogger<T> logger)
    {
        _logger = logger;
    }
}

 [Route("api/[controller]")]
[ApiController]
public class RfReportTypeController : BaseController<RfReportTypeController>
{
    private readonly IRfReportTypeService _rfReportTypeService;

    public RfReportTypeController(IRfReportTypeService rfReportTypeService)
    {
        _rfReportTypeService = rfReportTypeService ?? throw new ArgumentNullException(nameof(rfReportTypeService));
    }
}

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS7036 Не указан аргумент, который соответствует необходимому формальному параметру 'logger' BaseController<RfReportTypeController>.BaseController(IAppLogger<RfReportTypeController>) PWDRS.WebAPI C: \ Users \ M3MAH02\ source \ repos \ PWDRS \ PWDRS \ PWDRS.WebAPI \ Controllers \ RfReportTypeController.cs 17 Активно

1 Ответ

1 голос
/ 06 ноября 2019

Необходимо передать параметры, требуемые базовым конструктором

[Route("api/[controller]")]
[ApiController]
public class RfReportTypeController : BaseController<RfReportTypeController>
{
    private readonly IRfReportTypeService _rfReportTypeService;

    public RfReportTypeController(
        IRfReportTypeService rfReportTypeService, 
        IAppLogger<RfReportTypeController> logger //<--NOTE THIS
    ) : base(logger) //<-- NOTE THIS
    {
        _rfReportTypeService = rfReportTypeService ?? throw new ArgumentNullException(nameof(rfReportTypeService));
    }
}
...