Frage

Ich habe vorher eine Frage gestellt hier über autofac nicht entsorgen meine Objekte, wenn die HTTP-Anfrage endet.Ich denke jetzt habe ich ein größeres problem, becuasse es gibt Hinweise, dass es ist mit der GLEICHEN Objekt-Anfrage-auf-Anfrage.Wieder, ich bin mit thier Anweisungen hier.Mein test ist ein bisschen komplexer, denn ich bin mit der delegate-syntax, um ein Objekt zu erstellen, aber ich denke, ich bin Kennzeichnen es für Wunsch-Lebensdauer.Global.asax.cs:

protected void Application_Start(object sender, EventArgs e)
{
    ...
    var builder = new Autofac.Builder.ContainerBuilder();
    builder.Register<IDBConnectionSelector>(
            (c) => new CachingDBConnections(ConstructorArgs...))
        .HttpRequestScoped();

    var container = builder.Build();
    _containerProvider = new ContainerProvider(container);
}
public IContainerProvider ContainerProvider
{
    get { return _containerProvider; }
}
static IContainerProvider _containerProvider;

Meine Absicht hier ist zu registrieren IDBConnectionSelector um den konkreten Typ CachingDBConnections erstellt mit einem benutzerdefinierten Konstruktor, sondern mit HTTP-request-scope.

Einige Methoden der CachingDBConnections Objekt ist andernfalls am nachfolgenden Anforderungen in einer Weise, die führt mich zu glauben ich bin immer das gleiche, ich habe ein letztes mal, und nicht, eine NEUE für jede Anforderung.

Macht das Sinn?Was mache ich falsch?

War es hilfreich?

Lösung 2

I figured it out!

Ich wurde gefragt, den FALSCHEN container für die Objekt-Instanz - ich war zu Fragen der Anwendung-container für das Objekt und nicht das Anfrage-container.

D ' Oh!

Andere Tipps

Die meiste Zeit dieses (in jedem IoC-Container) passiert, werden Sie feststellen, dass eine Komponente entlang einer Kette von Abhängigkeiten ein Singleton ist.

z.

A -> B -> C

Wenn eine ‚Fabrik‘ ist, B ‚Singleton‘ und C ‚Fabrik‘, dann eine Lösung einen Verweis auf die Singleton B erhalten wird, die immer die gleiche C verweisen werden.

Um für eine neue C jedes Mal, wenn A löst erstellt bekommen, B muss auch seine ‚Fabrik‘.

Wie ist meine Vermutung? Ist das das Problem?

Nick

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top