Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 20252|Antwort: 1

[Quelle] Der Instanzumfang der Autofac-Komponente

[Link kopieren]
Veröffentlicht am 14.09.2018 13:22:21 | | | |
Der Instanzumfang bestimmt, wie Dienste zwischen Anfragen geteilt werden.

Ursprüngliche Adresse:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

Eine Instanz pro Abhängigkeit

Mit dieser Option wird jedes Mal, wenn der Dienst angefordert wird, eine neue Instanz zurückgegeben. Verwenden Sie InstancePerDependency(). Das ist die Standardoption. Der untenstehende Code, Zeilen 2 und 3, sind äquivalent.

Der folgende Code erzeugt für jede Schleife eine neue Instanz, insgesamt 100 Instanzen.

Einzelinstanz

Verwenden Sie diese Option, um einen Dienst entweder im Root- oder verschachtelten Scope anzufordern, wobei beide dieselbe Instanz zurückgeben. Verwenden Sie SingleInstance() zur Spezifikation.


Der folgende Code, w1 und w2, sind immer dasselbe Objekt, und es gibt nur eine Instanz der Worker-Klasse in 100 Schleifen.


Eine Instanz pro Lebenszyklusumfang

Verwenden Sie diese Option, um einen Dienst in einem bestimmten ILifetimeScope anzufordern und nur eine Instanz zurückzugeben. Verwenden Sie InstancePerLifetimeScope(). Im folgenden Code ist das 100-fache W1 in Scope1 dasselbe Objekt, und die 100-mal W2 in Scope2 sind dasselbe Objekt, aber w1 und w2 sind nicht dasselbe Objekt.


Eine Instanz pro Matching-Lebenszyklusbereich

Ähnlich wie [eine Instanz pro Lebenszyklus-Scope] oben, aber mit mehr Kontrolle. Verwenden Sie diese Option, um dem ILifetimeScope-Objekt ein Tag zur Verfügung zu stellen. Es gibt nur eine Instanz im Bereich des Tag-Team-Matches. Verwenden Sie die Methode InstancePerMatchingLifetimeScope().

Im untenstehenden Code sind w1 und w2 gleich, w3 und w4 sind gleich, aber w1 und w3 sind unterschiedlich.

Das entsprechende Markup muss beim Parsen angegeben werden, und der folgende Code wirft eine Ausnahme.

Eine Instanz pro Anfrage

Einige Anwendungen haben natürlich Request-Semantik, wie ASP.NET MVC- oder WebForm-Anwendungen. [Eine Instanz pro Anfrage] wird auf Basis von [eine Instanz pro passendem Lebenszyklusbereich] implementiert, indem Scope-Marker, Registrierungsfunktionen und Integration von gemeinsamen Typen bereitgestellt werden. Im Wesentlichen [eine Instanz pro passendem Lebenszyklusbereich].

ASP.NET Core verwendet eine Instanz pro Lebenszyklusumfang statt einer Instanz pro Anfrage.

Eine Instanz pro Owned

Der<T> implizite Assoziationstyp Owned erzeugt verschachtelte Lebenszyklusbereiche. Mit der Registrierung pro Instanz kann man Abhängigkeiten auf eigene Instanzen begrenzen.

In diesem Fall ist der ServiceForHandler-Service auf den Umfang der MessageHandler-Instanz beschränkt.


Gewindeumfang

Autofac kann die Objekte von Thread A dazu zwingen, die Abhängigkeiten von Thread B nicht zu erfüllen.

Dann soll jeder seinen eigenen Lebenshorizont erstellen

Wichtig: In einem Multithread-Szenario sollten Sie vorsichtig sein, den Elternumfang nicht zu bereinigen.Andernfalls können die Subscopes im abgeleiteten Thread den Service nicht auflösen.

Jeder Thread hat seine eigene Instanz von MyThreadScopedComponent, die im Wesentlichen ein Lifecycle-Scoped Singleton ist. Instanzen im Umfang werden nicht extern bereitgestellt, daher ist es einfach, Komponenten zwischen den Threads isoliert zu halten.

Durch Hinzufügen des ILifetimeScope-Parameters kann der Elternbereich in den Code eingefügt werden, der den Thread erzeugt, und Autofac injiziert automatisch den aktuellen Bereich, der dann zur Erstellung verschachtelter Scopes verwendet werden kann.

Wenn Sie es weiter steuern möchten, können Sie [eine Instanz pro passendem Lebenszyklusbereich] verwenden, um thread-scoped Komponenten mit internen Lebenszyklus-Scopes zu verknüpfen, wie in der Abbildung gezeigt:



Der "Kontext" im Diagramm ist der Lebenszyklusbereich, der mit der Methode BeginLifetimeScope erstellt wird.





Vorhergehend:Frontend-Mausklick-Effekte: Freiheit, Demokratie, Wohlstand
Nächster:{&quot;error_msg&quot;: &quot;IAM-Zertifizierung fehlgeschlagen&quot;}
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com