当我尝试将上下文用于自定义服务时出现以下错误:
System.ObjectDisposedException:'无法访问已处置的对象。导致此错误的常见原因是,处理从依赖项注入中解决的上下文,然后稍后尝试在应用程序中的其他位置使用相同的上下文实例。如果您在上下文上调用Dispose()或包装上下文
,可能会发生这种情况
我的代码由控制器和服务组成。 我的控制器的(简化)代码是:
public class IcsController : Controller
{
public string current_Directory = System.IO.Directory.GetCurrentDirectory();
//Importation du context (BDD)
private readonly Sync4All_AngularContext _context;
private readonly UserManager<User> _userManager;
public readonly OverbookingsManager _overbookingsManager;
private IIcsService _icsService;
public IcsController(Sync4All_AngularContext context, UserManager<User> userManager, IIcsService icsService, OverbookingsManager overbookingsManager)
{
_context = context;
_userManager = userManager;
_icsService = icsService;
_overbookingsManager = overbookingsManager;
}
//---------------------------------Telechargement et Update de tous les ICALS-----------------------------------
[HttpGet]
public ActionResult DownloadAndUpdate()
{
_overbookingsManager.SendEmailsOverbookings();
return Ok();
}
}
服务在配置服务中的定义如下
services.AddScoped<OverbookingsManager>();
该服务的代码如下:
public class OverbookingsManager
{
private readonly Sync4All_AngularContext _context;
public OverbookingsManager(Sync4All_AngularContext context)
{
_context = context;
}
public async void SendEmailsOverbookings()
{
List<Overbookings> overbookinsList = await _context.Overbookings.Where(m => DateTime.Compare(m.DtEmailSent, DateTime.Today.AddDays(-7)) < 0).ToListAsync(); //This is where i got the error of context disposed
//blabla rest of my code
}
}
当我在控制器上执行get请求时,它将调用方法DownloadAndUpdate(),该方法使用该服务。
我的控制器和服务的其他方法使用_context,但是我从不使用_context.dispose()。
我不明白问题所在,请您帮忙?
谢谢
答案 0 :(得分:0)
问题无效:
public async void SendEmailsOverbookings()
用Task代替:
public async Task SendEmailsOverbookings()
有关一些解释,请查看documentation:
对于事件处理程序以外的其他不返回值的方法,您可以 应该返回Task,因为返回的异步方法 迫不及待地想念。