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

ASP.NET Core抽象类依赖注入问题:自定义Razor视图页获取当前用户

在自定义WebViewPage中获取依赖注入服务的方法

在ASP.NET Core 2里,要给你自定义的WebViewPage抽象类注入IUserService其实很简单,这里有两种实用的实现方式:

方式一:直接从请求上下文获取(简单便捷)

你可以利用基类自带的PageContext属性,访问当前请求的服务容器来获取IUserService。为了避免重复调用服务,还可以加个缓存字段:

public abstract class WebViewPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> {
    public string Version { get { return "1.00.100"; } }

    private User _currentUser;
    public User CurrentUser {
        get {
            if (_currentUser == null) {
                // 从请求上下文的服务容器中获取IUserService实例
                var userService = PageContext.RequestServices.GetRequiredService<IUserService>();
                _currentUser = userService.GetCurrentUser();
            }
            return _currentUser;
        }
    }
}
public abstract class WebViewPage : WebViewPage<dynamic> { }

方式二:构造函数注入(符合DI最佳实践)

如果更倾向于标准的依赖注入模式,可以给自定义基类添加构造函数来接收IUserService,记得给无泛型版本的类也添对应构造函数:

public abstract class WebViewPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> {
    private readonly IUserService _userService;
    private User _currentUser;

    public string Version { get { return "1.00.100"; } }

    // 通过构造函数注入IUserService
    public WebViewPage(IUserService userService) {
        _userService = userService;
    }

    public User CurrentUser {
        get {
            if (_currentUser == null) {
                _currentUser = _userService.GetCurrentUser();
            }
            return _currentUser;
        }
    }
}
public abstract class WebViewPage : WebViewPage<dynamic> {
    // 传递服务实例给基类构造函数
    public WebViewPage(IUserService userService) : base(userService) { }
}

关键注意点

  • 一定要在Startup.cs的ConfigureServices里正确注册IUserService,比如:services.AddScoped<IUserService, UserService>(),否则获取服务时会抛出异常。
  • 缓存_currentUser是合理的,因为每个请求的WebViewPage实例是Scoped生命周期,一次请求内用户信息不会改变。

内容的提问来源于stack exchange,提问作者Saleh Bagheri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:23:39