You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基类中声明子类对应的ScopedLogger相关依赖注入?

更新: 下方Dmitry的回答解决了我的问题。我已将实现代码上传至GitHub和NuGet。


问题描述

此场景基于Blazor Server,但我认为这一点无关紧要。

我有一个基类,主要用于声明所有Razor页面所需的[Inject]服务,例如:

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

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

[Inject]
protected NavigationManager Navigation { get; set; } = default!;

我希望在基类中添加以下内容:

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

protected ScopedLogger<T> Logger { get; set; } = default!;

protected override async Task OnInitializedAsync()
{
        Logger = ScopedLoggerFactory.GetLogger(Principal);
}

其中<T>是继承该基类的子类。我尝试将基类声明为:

ExPageBase<T> : where T is class

然后Razor文件中写:

Interests : ExPageBase<Interest>

但编译器不接受这种写法。

目前我在每个子类中都做如下实现(当然这不算大问题,当前方案也可行):

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

private ScopedLogger<Interests> Logger { get; set; } = default!;

protected override async Task OnInitializedAsync()
{
    Logger = ScopedLoggerFactory.GetLogger(Principal);
}

有没有办法将这两个成员声明及赋值逻辑移入基类?


内容的提问来源于stack exchange,提问作者David Thielen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:32:42