Frage

suche ich die Verwendung von Autofac in unserer Web-Anwendung zuvor in der Vergangenheit Schloss Windsor verwendet haben.

Die Sache, die ich wirklich wie mit Autofac der Lage ist, sein dynamische Komponente Konstruktion durch Lamda Ausdrücke zum Ausdruck bringt, im Gegensatz zu DependancyResolvers usw. in Windsor zu schaffen.

Ein Szenario, das ich habe ist, dass ich eine bestimmte Komponente soll auf ASP.NET Session-Ebene Umfang registriert sein. Mit Windsor würde ich erstellen / Quelle ein neuer LifestyleManager jedoch mit Autofac kam ich mit auf dem Punkt:

//Register SessionContext at HTTP Session Level
builder.Register(c =>
{
    HttpContext current = HttpContext.Current;

    //HttpContext handes delivering the correct session
    Pelagon.Violet.Core.Interfaces.SessionContext instance = current.Session["SessionContext"] as Pelagon.Violet.Core.Interfaces.SessionContext;

    if (instance == null)
    {
        instance = c.Resolve<Pelagon.Violet.Core.Interfaces.SessionContext>();
        current.Session["SessionContext"] = instance;
    }

    return instance;
})
.FactoryScoped();

Welche irgendwann ich im Stande sein könnte in eine Erweiterungsmethode zu drehen. Ich akzeptiere diese implemtation wird bombardieren, wenn die HttpContext.Current.Session null ist, da es nur in einer Web-Anwendung verwendet werden soll.

Die Frage ist:

Was ist die beste Praxis für eine solche Registrierung in Autofac. Ich habe eine Menge Erwähnung über die Verwendung von verschachtelten Containern usw. gesehen, aber keine konkreten Beispiele, und ich bin daran interessiert, zu verstehen, was mit dem obigen Ansatz falsch sein könnte (einzige, was ich ist die automatische Entsorgung Sachen denken kann).

Danke.

War es hilfreich?

Lösung

Das sieht gut aus.

Kennzeichnung der Komponente 'ExternallyOwned ()' wird sichergestellt, dass Autofac nicht Dispose() auf sie nicht nennen.

Der einzige gotchas hier ist, dass Ihre Session-scoped Komponente Abhängigkeiten seines eigenen über die aktuellen Container lösen könnte, und somit Hinweise auf Dinge halten, die auf die aktuelle Anforderung gehören können (zum Beispiel). Dies sollte leicht zu erkennen in obwohl Tests.

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