Frage

Ich habe eine Anwendung kommt, wo ein gemeinsames Objekt einen Verweis auf ein pro-Request-Objekt benötigt.

Shared:      Engine
                |
Per Req:  IExtensions()
                |
             Request

Wenn ich versuche, die IExtensions direkt in den Konstruktor von Engine zu injizieren, auch als Lazy(Of IExtension), erhalte ich eine „No Umfang Matching [Anfrage] ist sichtbar aus dem Bereich, in dem die Instanz angefordert wurde.“ Ausnahme, wenn es versucht, jede IExtension zu instanziiert.

Wie kann ich eine HttpRequestScoped Instanz und dann spritzen sie in eine gemeinsame Instanz erstellen?

Wäre es als gute Praxis werden sie setzen in der Request Fabrik (und damit inject Engine in RequestFactory)?

War es hilfreich?

Lösung

Durch die gemeinsamen Anforderungen an die Lebensdauer von Engine können Sie nicht inject Anfrage-scoped Erweiterungen hinein. Was könnten Sie haben eine Methode oder Eigenschaft auf Motor, die aktiv eine Sammlung von Erweiterungen der aktuellen Anforderung Umfang lösen wird.

So lassen Sie uns zuerst Engine einen Konstruktor Abhängigkeit nehmen:

public class Engine
{
    public Engine(..., Func<IExtensions> extensionsPerRequest) 
    {
        _extensionsPerRequest = extensionsPerRequest;
    }


    public IExtensions Extensions
    {
       get { return _extensionsPerRequest(); }
    }
 }

Und dann, in Ihrer Autofac Anmeldung:

builder.Register<Func<IExtensions>>(c => RequestContainer.Resolve<IExtensions>());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top