Ich habe mein Projekt, das das übliche Repository-Muster mit Services und Unit of Work verwendet (alle mit Ninject injizieren die Abhängigkeiten von einem NinjectModule), aber ich versuche auf einen Service von ActionFilterAttribute
zuzugreifen, um Informationen zu injizieren ( von DB) im Layout der Seiten, die ich zeige, damit ich nicht mit allen Aktionen auf jedem Controller herumspielen muss.
Das Problem tritt auf, wenn ich in der DB auf einem Bildschirm speichere und zum nächsten gehe und dann zum vorherigen zurückkomme (mit einem Standard @Url.Action
): Der ActionFilterAttribute
für die Index
Aktion wird ausgelöst, aber der Aufruf an den Dienst und das entsprechende Repository (innerhalb des Attributs) werfen eine Ausnahme wegen der DbContext has been disposed
.
Gibt es ein Problem beim Zugriff auf einen Dienst und folglich auf DbContext
von ActionFilterAttribute
beim Injizieren des Dienstes über Property Injection? Ich möchte eine Notiz machen, dass ich Property-Injection für den Dienst im Attribut verwenden, da der Konstruktor zwei Parameter erhält, die abhängig von der Signatur der Action-Methoden willkürlich sind, so dass meine einzige Option war, über die Eigenschaft zu injizieren.
Lassen Sie es mich wissen, wenn Sie Code benötigen, und ich werde die Frage aktualisieren.
Ich habe die Lösung für mein Problem in der folgenden Frage gefunden: Abhängigkeiten in ASP.NET einfügen MVC 3 Aktionsfilter. Was ist falsch an diesem Ansatz?
Kombination von Mark Seeman die Antwort mit Kommentar von slinglingwarrior war die Lösung dafür.
Im Grunde genommen habe ich mein ActionFilterAttribute in ein Attribut aufgeteilt, das lediglich meine Aktionen schmückte und die Parameter, die ich später brauche, und einen ActionFilter, der die benutzerdefinierten Attribute der Aktion überprüft, und wenn mein Attribut existiert, dann injiziert es die gewünschten Daten die DB in den ViewBag. Alles wird später mit der BindFilter-Erweiterung von Ninject verknüpft, so dass es nur für die Methoden gilt, die es benötigt.