Pass Ilogger на неконтроллерных моделях - PullRequest
1 голос
/ 11 июля 2019

Я создаю приложение в ядре .net и пытаюсь вывести журнал.

Мне удалось записать вывод с контроллера, и я также хочу записать вывод с модели, как показано ниже.

К сожалению, я не знаю, что передать в качестве аргументов конструктору. Мое предположение такое же Ilogger<controller>, как и у контроллера, но я хотел бы знать, если есть правильный путь.

Заранее спасибо.

Контроллер:

public class SampleController : Controller {
    public readonly ILogger<SampleController > _logger;
    public SampleController (ILogger<SampleController > logger)
    {
        _logger = logger;
    }


    [HttpGet("[action]")]
    public string FindSample()
    {
        _logger.LogInformation("FindSample Start");

        // ***** Is it necessary to carry over the log of the sample controller to a much lower DAO from here? *****
        var model = new SampleModel(_logger);
        var result = model.Find();

        _logger.LogInformation("FindSample End");
        return result;
    }
}

Модель:

    public class SampleModel
    {
        public readonly ILogger<SampleController> _logger;
        public SampleModel(ILogger<SampleController> logger)
        {
            _logger = logger;
        }

        public string Find()
        {
            _logger.LogInformation("FindModel Start");

            var dao = new SampleDao(_logger);
            var code = dao.GetCode();

            _logger.LogInformation("FindModel End");
            return code;
        }
    }

ДАО:

    public class SampleDao
    {
        public readonly ILogger<SampleController> _logger;
        public SampleContext SampleContext;

        // ***** Should I pass it as an argument forever? *****
        public SampleDao(ILogger<SampleController> logger)
        {
            _logger = logger;
            if (SampleContext == null)
            {
                SampleContext = new SampleContext();
            }
        }

        public string GetCode()
        {
            _logger.LogInformation("GetCode Start");

            var code = SampleContext.SampleTable.FirstOrDefault().code;

            _logger.LogInformation("GetCode End");
            return code;
        }
    }

1 Ответ

1 голос
/ 11 июля 2019

В качестве общего аргумента вы должны передать класс, в который вводится логгер. Поэтому вы должны использовать:

В вашем Дао

ILogger<SampleDao> logger

В вашей модели

ILogger<SampleModel> logger

Для получения дополнительной информации вы можете проверить: Вход в ядро ​​ASP.NET

...