Как я могу объявить ILogger в базовом классе?C#

Место общения программистов C#
Anonymous
Как я могу объявить ILogger в базовом классе?

Сообщение Anonymous »

Обновление: Ответ Дмитрия ниже помог мне решить эту проблему. Я разместил свою реализацию на GitHub и NuGet.

Это на сервере Blazor, хотя я думаю, что здесь это не имеет значения.У меня есть базовый класс, в котором я в первую очередь объявляю службы [Inject], необходимые всем моим страницам Razor. Так много:

Код: Выделить всё

[Inject]
protected IDbContextFactory NoTrackingDbFactory { get; set; } = default!;

[Inject]
protected ExUserManager UserManager { get; set; } = default!;

[Inject]
protected NavigationManager Navigation { get; set; } = default!;
Я бы тоже хотел:

Код: Выделить всё

[Inject]
private ScopedLoggerFactory ScopedLoggerFactory { get; set; } = default!;

protected ScopedLogger Logger { get; set; } = default!;

protected override async Task OnInitializedAsync()
{
Logger = ScopedLoggerFactory.GetLogger(Principal);
}
Где — это унаследованный от него подкласс. Я попытался объявить базовый класс как:

Код: Выделить всё

ExPageBase : where T is class
А затем файл бритвы как

Код: Выделить всё

Interests : ExPageBase
но компилятору это не понравилось.
В настоящее время то, что я делаю в каждом подклассе (и, конечно, это не имеет большого значения, поэтому настоящее ситуация в порядке) это:

Код: Выделить всё

[Inject]
private ScopedLoggerFactory ScopedLoggerFactory { get; set; } = default!;

private ScopedLogger Logger { get; set; } = default!;

protected override async Task OnInitializedAsync()
{
Logger = ScopedLoggerFactory.GetLogger(Principal);
}
Есть ли способ переместить эту часть двух объявлений членов и присвоение в базовый класс?

Подробнее здесь: https://stackoverflow.com/questions/770 ... base-class

Вернуться в «C#»