C# 为什么GetUsersInRoleAsync方法只能在.cshtml中工作?

C# 为什么GetUsersInRoleAsync方法只能在.cshtml中工作?,c#,asp.net,C#,Asp.net,我正在开发一个Web应用程序(.NET Core带有Razor页面,而不是mvc和indivudual用户帐户),在这个应用程序中,我需要显示具有相应角色的用户 有人能解释一下以下代码块之间的区别吗 无法使用Users.cshtml.cs工作 \u userManager在cs版本中为空,因为您没有将其作为依赖项注入 在razor版本中,您为该对象指定了@inject 您需要在cs版本中添加一个构造函数,并注入_userManager依赖项,但是您使用的框架会这样做 通常它看起来像这样: pri

我正在开发一个Web应用程序(.NET Core带有Razor页面,而不是mvc和indivudual用户帐户),在这个应用程序中,我需要显示具有相应角色的用户

有人能解释一下以下代码块之间的区别吗

无法使用Users.cshtml.cs工作
\u userManager
在cs版本中为空,因为您没有将其作为依赖项注入

在razor版本中,您为该对象指定了@inject

您需要在cs版本中添加一个构造函数,并注入_userManager依赖项,但是您使用的框架会这样做

通常它看起来像这样:

private readonly IUserManager<IApplicationUser> _userManager;

public UsersModel(
    IUserManager<IApplicationUser> userManager) {
    _userManager = userManager;
}
private只读IUserManager\u userManager;
公共用户模型(
IUserManager(用户管理器){
_userManager=userManager;
}

注入的依赖项通常在接口级别工作,而不是具体类型级别。如果您以后需要更改某些内容的具体实现,这将避免大量代码重构。

请在发布时检查标记两次…编辑我的帖子。谢谢你的注意。你能告诉我有什么不同吗?与第一种情况相比,您正在创建一个私有对象,并且没有为其分配任何内容,因此为null,因此出现错误;第二种情况,您正在注入该对象,该对象获取其值,因此工作
async void
-我将做一些工作,但您无法确定我何时完成。如果你依靠
OnGet
来确保
admins
已经被分配了一个值,为什么你要使用一种方法,在这种方法中你显然无法确定何时完成?好的,我想我理解你的观点。但是它在我的.cshtml文件中注入了_userManager-dependency。我想在我的.cs文件中使用它。我可以在我的.cs文件中插入/引用它吗?以前没有对razor页面做过很多工作。是的,您可以在cs文件中注入依赖项。您使用的是什么依赖注入框架?正如我在第一篇文章中所说的,.NET Core v2 web应用程序(不是mvc)和Razor Pages这是一个web框架,您可以选择多种依赖注入框架来使用它。我假设您使用的是默认提供的实现。
@page
@model UsersModel
@inject UserManager<ApplicationUser> _userManager
@{
 var admins = _userManager.GetUsersInRoleAsync("Admins").Result;
}

@foreach(var user in @Model.admins)
{
    <h3>@user</h3>
}
// not this
public UserManager<ApplicationUser> _userManager;

// but this
var _userManager serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
private readonly IUserManager<IApplicationUser> _userManager;

public UsersModel(
    IUserManager<IApplicationUser> userManager) {
    _userManager = userManager;
}