我正在开发一个with应用程序(.NET,而不是mvc和indivudual用户帐户),在这里我需要显示具有相应角色的用户。
有人能解释一下以下代码块之间的区别吗?
不使用Users.cshtml.cs
public class UsersModel : PageModel
{
private UserManager<ApplicationUser> _userManager;
public IList<ApplicationUser> admins { get; set; }
public UsersModel(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public async void OnGet()
{
admins = _userManager.GetUsersInRoleAsync("Admins").Result;
}
}
它在加载页面时崩溃并产生错误。
使用Users.cshtml工作
@page
@model UsersModel
@inject UserManager<ApplicationUser> _userManager
@{
var admins = _userManager.GetUsersInRoleAsync("Admins").Result;
}
@foreach(var user in @Model.admins)
{
<h3>@user</h3>
}
因此,在第一个代码块(不工作)中没有语法错误。当我运行代码时,在将这个帖子标记为副本之前,我收到的是'Object reference not set to an instance of an object.
‘,我并不是在寻找关于修复这个特定错误的答案。
我想知道是否有人能告诉我..cshtml版本和..cs版本之间的区别?我想使用.cshtml.cs-版本,因为它更清晰。
编辑1
// not this
public UserManager<ApplicationUser> _userManager;
// but this
var _userManager serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
发布于 2018-04-30 06:02:19
在cs版本中,_userManager
是空的,因为您没有将它作为依赖项注入。
在您指定的剃须刀版本中,要为该对象提供@inject。
您将需要向cs版本中添加一个构造函数,并注入_userManager依赖项,但是您使用的框架就是这样做的。
通常情况下,它看起来如下所示:
private readonly IUserManager<IApplicationUser> _userManager;
public UsersModel(
IUserManager<IApplicationUser> userManager) {
_userManager = userManager;
}
注入的依赖项通常在接口级别工作,而不是在具体类型级别工作。这将避免以后大量的代码重构,如果您需要更改某些具体的实现。
https://stackoverflow.com/questions/50101879
复制相似问题