Ich habe ein MVC3-Projekt, das Ninject, Entity Framework und das Unit of Work-Muster mit einer Service-Schicht verwendet.Ninject Scope Problem mit Aufgaben/Threads
Meine AsyncService-Klasse hat eine Funktion, die eine Hintergrundaufgabe startet, die beispielsweise Benutzer zum Benutzer-Repository hinzufügt. Mein aktuelles Problem ist, dass die Aufgabe nur für ein paar Sekunden korrekt ausgeführt wird, bevor ein Fehler auftritt, dass der DbContext entsorgt wurde. Mein Datenbankkontext, der mit Ninject's InRequestScope() injiziert wird, scheint entsorgt zu werden, da InRequestScope() ihn an HttpContext bindet.
Ich habe über InThreadScope() gelesen, aber ich bin mir nicht sicher, wie es in meinem MVC-Projekt richtig zu implementieren.
Meine Frage ist: Was ist der richtige Weg Ninject in meiner Aufgabe zu verwenden?
public class AsyncService
{
private CancellationTokenSource cancellationTokenSource;
private IUnitOfWork _uow;
public AsyncService(IUnitOfWork uow)
{
_uow = uow;
}
public void AsyncStartActivity(Activity activity)
{
...snip...
this.cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = this.cancellationTokenSource.Token;
var task = Task.Factory.StartNew(() =>
{
foreach (var user in activity.UserList)
{
this._uow.UserRepository.Add(new User() {UserID = user});
}
this._uow.Save();
}, cancellationToken);
...snip...
}
}
Gibt es ein Codebeispiel? Jason, wo kannst du es zur Arbeit bringen? Ich habe das selbe Problem und das Folgen des Links hat nicht geholfen. –
Ich habe das gleiche Problem, ich würde gerne einen Beispielcode für dieses Szenario sehen. –