繁体   English   中英

依赖注入UserManager正在处理异步调用(ASP.NET CORE)

[英]Dependency Injected UserManager is disposing on async call (ASP.NET CORE)

我正在使用ASP.NET Core及其内置的依赖注入和asp.net身份。

我遇到的问题是每当我尝试通过异步访问任何上下文时(即在此示例中UserManager<ApplicationUser> ),它在访问时被处理。

例如,我的控制器在下面(我们关注的对象是UserManager

private readonly ApplicationDbContext _dbContext;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ViewRender _view;
private readonly IConfiguration _config;

public UserController(ApplicationDbContext dbContext,
    UserManager<ApplicationUser> userManager,
    ViewRender view,
    IConfiguration config)
{
    this._dbContext = dbContext;
    this._userManager = userManager;
    this._view = view;
    this._config = config;
}

请注意,正在使用startup.cs中的visual studio模板默认设置注入_userManager

现在在这个控制器的方法中我尝试以下方法:

[HttpDelete]
public async void Delete(string id)
{

    var user = _userManager.Users.Where(a => a.Id == id).FirstOrDefault();
    user.Deleted = true;
    var result= await _userManager.UpdateAsync(user);

}

但是当命中await _userManager.UpdateAsync(user) ,它会调用“对象被丢弃”错误。 我对async / await的理解是执行将在等待时停止? 因此控制器在完成之前不应该配置_userManager对象? (显然这种逻辑是错误的)

一个有效的解决方案是不使用aysnc方法,只需调用_userManager.UpdateAsync(user).Result; 但是想了解aysnc / await

更新操作以使Task返回类型而不是void

[HttpDelete]
public async Task Delete(string id) {
    var user = _userManager.Users.Where(a => a.Id == id).FirstOrDefault();
    user.Deleted = true;
    var result= await _userManager.UpdateAsync(user);
}

为了更好地理解async / await,请阅读本文

Async / Await - 异步编程的最佳实践

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM