Diskuze: ASP Core 3 MVC | BackgroundService - Mazanie záznamov z databáze
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, trochu jsem upravil tvou třídu.
public class OneTimeMessageCollector : BackgroundService
{
private readonly IServiceProvider serviceProvider;
public OneTimeMessageCollector(IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public void RemoveOldMessages(int numberDay)
{
using (var scope = serviceProvider.CreateScope())
{
var _context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
TimeSpan time = new TimeSpan(numberDay, 0, 0, 0);
OTmessage[] messages = _context.OTmessages.Where(m => (DateTime.Now - m.CreateDay) <= time).ToArray();
// Odstráň správy
if (messages != null && messages.Length > 0)
{
_context.OTmessages.RemoveRange(messages);
_context.SaveChanges();
}
}
}
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
RemoveOldMessages(1);
await Task.Delay(new TimeSpan(1, 0, 0, 0), stoppingToken);
}
}
}
ApplicationDbContext nepředávám přímo v constructoru, ale pomocí DI
si posunu IServiceProvider, z kterého si následně v RemoveOldMessages z
contextu vytáhnu ApplicationDbContext. Nevím proč to nejde předat přímo,
ale takhle to funguje
Podle všeho to na přímo ani nepůjde.
https://stackoverflow.com/…cy-injection
Kááááámo fakt moc dík!!! Skušal sem to odrána a neslo mi to vúbec.
Vcil fest uz jo!
Fakt moc dik..
Zobrazeno 4 zpráv z 4.