Hai seguito l'errore, quando provo a utilizzare il mio contesto in un servizio personalizzato:
System.ObjectDisposedException: 'Impossibile accedere a un oggetto disposto. Una causa comune di questo errore è l'eliminazione di un contesto risolto dall'integrazione delle dipendenze e successivamente il tentativo di utilizzare la stessa istanza di contesto altrove nell'applicazione. Ciò può verificarsi se si chiama Dispose () nel contesto o si avvolge il contesto
Il mio codice è composto da un controller e un servizio. Il codice (semplificato) del mio controller è:
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();
}
}
Il servizio è definito come seguito nei servizi di configurazione
services.AddScoped<OverbookingsManager>();
E il codice del servizio è il seguente:
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
}
}
Quando faccio una richiesta get sul mio controller, chiama il metodo DownloadAndUpdate (), che usa il servizio.
Altri metodi del mio controller e servizi usano _context, ma non faccio mai _context.dispose ().
Non capisco il problema, potresti aiutarmi per favore?
Grazie
Il problema è nullo:
public async void SendEmailsOverbookings()
Sostituiscilo con Attività:
public async Task SendEmailsOverbookings()
Per qualche spiegazione dai un'occhiata alla documentazione :
Per i metodi diversi dai gestori di eventi che non restituiscono un valore, è necessario restituire un'attività, poiché non è possibile attendere un metodo async che restituisce void.