如何在基类中声明子类对应的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
相关产品推荐
相关产品推荐

