HINWEIS: Es gibt 3 Fragen hier und ich habe keine separaten Fragen gestellt, da sie alle etwas mit demselben Code zu tun haben.
Ich habe den folgenden Code, der die Verbindung zu meinem RavenDB im Application_Start einmal pro Lebenszyklus der Anwendung registriert:
%Vor%Jetzt funktioniert das gut und das sollte nur einmal pro Lebenszyklus der Anwendung erstellt werden. Jetzt wollte ich die DocumentSession zu Autofac hinzufügen, also habe ich versucht, dies im Application_Start hinzuzufügen:
%Vor%In meinem UserRepository habe ich den folgenden Konstruktor:
%Vor%Wenn ich versuche, das auszuführen, bekomme ich den folgenden Laufzeitfehler:
Parameter 'Raven.Client.Document.DocumentSession Session' des Konstruktors 'Void .ctor (Raven.Client.Document.DocumentStore, Raven.Client.Document.DocumentSession) kann nicht aufgelöst werden'
Dieser Fehler klingt für mich wie Autofac glaubt nicht, dass es eine DocumentSession hat, aber das ist, was store.OpenSession () zurückgibt, so sollte es. Wer weiß, was diesen Fehler verursachen würde? Setze ich die Sitzungsvariable nicht korrekt (dies ist die gleiche Speichervariable, die funktioniert)?
Eine weitere Sache, die mit dem oben genannten Problem zusammenhängen mag, ist die Frage, wie ich eine Autofac-Instanz pro Anfrage anstelle eines Anwendungslebenszyklus hinzufügen kann. Während das RavenDB DocumentStore-Objekt nur einmal im Lebenszyklus der Anwendung erstellt werden sollte, sollte die DocumentSession einmal pro Anfrage erstellt werden (möglicherweise führt das Erstellen pro Anwendungsebene zu dem oben beschriebenen Fehler).
Eine letzte Frage, die ich hier über Autofac (in Bezug auf den obigen Code) stellen werde, ist die Freigabe der Objekte. Wenn Sie sich dieses Tutorial ansehen:
Das letzte Stück Code:
%Vor%und der Sinn dieses Codes besteht darin, das Lecken der Sitzungen zu verhindern. Jetzt ist das etwas, um das ich mich auch für Autofac kümmern muss, und wenn ja, wie würde ich das in Autofac machen?
Ich vermute, Sie wollen etwas wie:
%Vor%"Die standardmäßigen ASP.NET- und WCF-Integrationen sind so eingerichtet, dass InstancePerLifetimeScope () eine Komponente an den aktuellen Webanforderungs- oder Dienstmethodenaufruf anfügt." - Autofac: InstanceScope
Grundsätzlich behandelt InstancePerLifetimeScope
in einer Webanwendung den einen pro HTTP-Kontextaspekt und außerdem alle Typen, die IDisposable
implementieren.
Tags und Links asp.net-mvc-3 dependency-injection autofac ravendb