Тип базового класса для ILogger <T>с использованием внедрения зависимостей - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть базовый класс, который выполняет некоторую работу, включая ведение журнала. У меня есть зависимость ILogger, внедренная в конструктор

public abstract class BaseClassExample
{
    protected readonly ILogger<BaseClassExample> logger;

    public class BaseClassExample(ILogger<BaseClassExample> logger)
    {
        this.logger = logger;
    }
}

. И я хочу, чтобы классы реализовывали BaseClassExample и тоже выполняли свою работу, включая ведение журнала.

public class DerivedClass : BaseClassExample
{
    protected readonly ILogger<DerivedClass> logger;

    public class BaseClassExample(ILogger<DerivedClass> logger)
    {
        this.logger = logger;
    }
}

Это правильный способ делать вещи? Должен ли я получить тип реализующего класса для ведения журнала для базового класса? Должен ли я иметь отдельный экземпляр регистратора (с типом DerivedClass) или попытаться использовать тот же, что и базовый класс?

1 Ответ

1 голос
/ 21 февраля 2020

используйте none generi c ILogger в вашем базовом классе, но ILogger<DerivedClass> в вашем производном классе. Таким образом, вы можете просто передать ILogger вашему базовому классу, если необходимо:

public abstract class BaseClassExample
{
    private readonly ILogger logger;

    public class BaseClassExample(ILogger logger)
    {
        this.logger = logger;
    }
}

и

public class DerivedClass : BaseClassExample
{
    private readonly ILogger<DerivedClass> logger;

    public class BaseClassExample(ILogger<DerivedClass> logger)
                  :base(logger)
    {
        this.logger = logger;
    }
}

таким образом, вы не только сможете использовать его проще, если каким-то образом получите два Производный класс вы можете использовать ILogger в обоих из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...