Inhaltsverzeichnis
Singleton: global einzigartige Instanz
Scoped: Eine Instanz pro Anfrage
Transient: Erstellen Sie jedes Mal neu, wenn Sie es verwenden
Mehrere Vorsichtsmaßnahmen für den Lebenszyklus -Matching
Heim Backend-Entwicklung C#.Net-Tutorial C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient

C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient

Jul 18, 2025 am 01:29 AM

Die drei Lebenszyklen der Abhängigkeitsinjektion in C# sind Singleton, Scoped und Transient. Ihre jeweiligen Funktionen und anwendbaren Szenarien sind wie folgt: 1. Singleton ist eine global einzigartige Instanz, die für Protokollierung, globale Konfiguration und andere Objekte geeignet ist, die nicht umgebaut werden müssen. Es ist jedoch erforderlich, um injizierende oder vorübergehende Dienste zu vermeiden. 2. Scoped ist eine Instanz pro Anforderung, geeignet für den Datenbankkontext und Sitzungsdienste und kann nicht in Singleton verwendet werden. 3. Transient ist eine neue Instanz, die für staatenlose leichte Dienste geeignet ist. Die Auswirkungen der Erstellungskosten auf die Leistung sollten jedoch Aufmerksamkeit geschenkt werden.

C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient

Im Abhängigkeitsinjektionssystem (DI) von C#bestimmt der Lebenszyklus von Diensten, wie sie in Anwendungen erstellt und gemeinsam genutzt werden. Das Verständnis des Unterschieds zwischen Singleton, Scoped und Transient ist die Grundlage für das Schreiben von guten .NET -Anwendungen. Lassen Sie uns kurz über ihre jeweiligen Merkmale und anwendbaren Szenarien sprechen.

C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient

Singleton: global einzigartige Instanz

Ein Singleton -Lebenszyklus bedeutet, dass ein Dienst im gesamten Anwendungslebenszyklus nur einmal erstellt wird und während der gesamten Anwendung die gleiche Instanz teilt.

  • Anwendbare Szenarien : wie Holzfäller, globales Konfigurationsmanagement, Cache -Dienste usw. Objekte, für die keine häufige Rekonstruktion erforderlich ist.
  • Hinweis : Wenn Sie in den Singleton -Service Scoped- oder Transient -Dienste injizieren, sollten Sie vorsichtig ein Lebenszyklus -Missverhältnis vermeiden.

Wenn Sie sich beispielsweise so im Start oder Programm registrieren.cs:

C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient
 services.addsingleton <iLogger, logger> ();

Dann existiert diese Logger -Instanz, bis das Programm geschlossen ist.


Scoped: Eine Instanz pro Anfrage

Der skopierte Lebenszyklusdienst wird in jeder Anfrage einmal erstellt (z. B. eine HTTP -Anfrage) und teilt überall die gleiche Instanz innerhalb der Anfrage.

C# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient
  • Anwendbare Szenarien : Datenbankkontext (z. B. DBContext of Entity Framework) und dienste von Benutzersitzungen.
  • FAQ : Injizieren Sie keine Scoped -Dienste in Singleton -Dienste, sonst kann sie Speicherlecks oder verwirrende Status verursachen.

Beispielsweise registrieren Sie einen Datenbankkontext:

 services.addscoped <mydbContext> ();

Auf diese Weise erstellt jede HTTP -Anfrage eine neue MyDbContext -Instanz und wird nach Abschluss der Anfrage veröffentlicht.


Transient: Erstellen Sie jedes Mal neu, wenn Sie es verwenden

Transient Lifecycle Service erstellt jedes Mal eine neue Instanz, wenn sie angefordert wird.

  • Anwendbare Szenarien : Leichte und staatenlose Dienste wie Werkzeugkurse, Konverter, Validatoren usw.
  • Leistungsnotiz : Obwohl es sich jedes Mal um eine neue Instanz handelt, wenn die Objekterstellung teuer ist, kann dies die Leistung beeinflussen.

Registrierungsmethode:

 Services.Addtransient <itokenenerator, Tokenenerator> ();

Jedes Mal, wenn ITokenGenerator aufgerufen wird, wird eine neue TokenGenerator -Instanz erhalten.


Mehrere Vorsichtsmaßnahmen für den Lebenszyklus -Matching

  • Mischen Sie keine Dienste, die für Lebenszyklen nicht geeignet sind . Beispielsweise ist die Verwendung von Scoped -Instanzen in Singleton anfällig für Fehler.
  • Verstehen Sie die Abhängigkeiten von Dienstleistungen . Wenn ein Dienst von einem anderen Dienst abhängt, müssen ihre Lebenszyklen koordiniert werden.
  • Achten Sie auf das Verhalten des Lebenszyklus während des Tests . Manchmal ist der Simulationslebenszyklus in Unit -Tests falsch, was zu einer Verzerrung der Testergebnisse führt.

Grundsätzlich ist das. Diese drei Lebenszyklen haben ihre eigenen Zwecke, und der Schlüssel ist zu verstehen, wie sie in verschiedenen Szenarien abschneiden. Wenn Sie den Lebenszyklus korrekt verwenden, ist das Programm klarer und stabiler.

Das obige ist der detaillierte Inhalt vonC# Abhängigkeitsinjektionslebensdauer: Singleton gegen Scoped vs Transient. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1527
276
Verwenden der Aufgabe Parallel Library (TPL) in C# Verwenden der Aufgabe Parallel Library (TPL) in C# Jul 31, 2025 am 07:56 AM

Die TPL von C#vereinfacht die parallele Aufgabenverarbeitung durch die Aufgabenklasse. 1. verwenden Sie task.run () oder task.factory.startNew (), um die Aufgabe zu starten, und empfehlen Sie den ersteren; 2. Erhalten Sie das Ergebnis durch Aufgabe und warten Sie auf die Fertigstellung mit Warte- oder. 1. Verwenden Sie die Aufgabe. WhenAll (), um mehrere Aufgaben parallel auszuführen, achten Sie auf den Ressourcenwettbewerb. V. 5. Verwenden Sie CancellationTokenSource, um die Aufgabe zu stornieren, die für Zeitüberschreitungs- oder Benutzer -Stornierungsszenarien geeignet ist. Achten Sie gleichzeitig auf, um zu vermeiden, dass synchroner und asynchroner Code gemischt werden, um Deadlockprobleme zu verhindern.

C# var Keyword Best Practices C# var Keyword Best Practices Jul 21, 2025 am 03:02 AM

Bei der Verwendung von var sollte es anhand der Klarheit des Typs ermittelt werden und ob die Lesbarkeit betroffen ist. 1. Wenn der Typ auf der rechten Seite der Zuordnung klar ist, wie z. B. varlist = newList (); kann die Codes -Einfachheit verbessern; 2. Wenn der Typ fuzzy ist oder zum Objekt- oder Schnittstellentyp zurückkehrt, sollte Var vermieden werden, wie z. Verbesserung der Lesbarkeit; 3.. Verwenden Sie Varizen in anonymen Typen und LINQ -Abfragen, z. B. anonyme Objekte empfangen, aber eine anschließende Verarbeitung wird empfohlen, um sie als spezifischen Typ zu verkörpern. 4. In Teamprojekten sollte der Codierungsstil einheitlich sein, und Var sollte vernünftigerweise durch .DitorConfig oder Code -Überprüfung verwendet werden, um Missbrauch zu vermeiden und die Wartung zu beeinflussen.

Was sind Lambda -Ausdrücke in C#? Was sind Lambda -Ausdrücke in C#? Jul 20, 2025 am 01:20 AM

Lambda -Ausdrücke werden in C# zum Schreiben von Inline -anonymen Funktionen verwendet, die überall dort verwendet werden können, was Sie zum Delegieren benötigen. Sie sind einfach und flexibel, insbesondere für LINQ- oder Asynchroncode geeignet. Lambda -Ausdrücke verwenden den => Operator, links sind Eingabeparameter, rechts sind Ausdrücke oder Anweisungsblöcke; Zum Beispiel repräsentiert x => xx eine Lambda, die X akzeptiert und das Quadrat zurückgibt. Wenn es mehrere Parameter gibt, muss es in Klammern eingewickelt werden, wie (intx, inty) => x y kann der Typ vom Compiler weggelassen und abgeleitet werden. Zu den gemeinsamen Verwendungen gehören die LINQ -Abfrage, die Ereignisverarbeitung, die asynchrone Programmierung usw. wie die Zahlen (n => n%2 == 0), die gleiche Zahlen filtern. Im Gegensatz zur herkömmlichen Methode Lambda

Wie vergleiche ich zwei Saiten in C#? Wie vergleiche ich zwei Saiten in C#? Jul 21, 2025 am 02:49 AM

Der Vergleich von Zeichenfolgen in C# sollte auf der Szenenauswahlmethode basieren. Der == Operator ist standardmäßig Fallempfindlichkeit und ist basierend auf der aktuellen Kultur verglichen, ist jedoch nicht für komplexe Szenarien geeignet. 1. Die Verwendung des == Operators ist zum schnellen Vergleich geeignet, erfüllt jedoch möglicherweise nicht die erwarteten Ergebnisse aufgrund von Kultur oder Fall. 2. Verwenden von String.equals () und Passing in String Comparison -Aufzählung können eine genauere Kontrolle erreichen, wie z. B. Ordinal, ordinalignorecase, invariantculture usw.; 3. Achten Sie beim Vergleich auf die Behandlung von Null- oder leeren Saiten. Es wird empfohlen, die statische Methode für String.equals () oder die String zu verwenden. Isnullorempt zuerst.

Wie stehe ich eine Verbindung zu einer SQL Server -Datenbank in C#? Wie stehe ich eine Verbindung zu einer SQL Server -Datenbank in C#? Jul 25, 2025 am 12:49 AM

Um eine Verbindung zu einer SQLServer -Datenbank herzustellen, besteht die häufigste Möglichkeit, die SQLConnection -Klasse in ado.net zu verwenden. 1. Sie müssen das Paket microsoft.data.sqlclient installieren und auf den Namespace verweisen. 2. Schreiben Sie eine Verbindungszeichenfolge, die die Serveradresse, den Datenbanknamen und die Authentifizierungsinformationen enthält. 3.. Verwenden und versuchen Sie es mit dem Catch, eine Verbindung herzustellen und Abfragen auszuführen, wodurch die Ressourcenveröffentlichung und die Ausnahmebehandlung sichergestellt werden. 4. Häufige Probleme sind Remoteverbindungseinstellungen, Firewall -Konfiguration, Port -Release- und Anmeldeberechtigungen usw. und müssen einzeln überprüft werden.

Wie lese ich eine Textdateizeile für Zeile in C#? Wie lese ich eine Textdateizeile für Zeile in C#? Aug 02, 2025 am 06:52 AM

Es gibt zwei allgemeine Möglichkeiten, die Zeile der Textdateien nach Zeile in C#zu lesen: Verwenden von StreamReader und Datei.readlines (). 1. Die Readline () -Methode von StreamReader eignet sich für die Verarbeitung großer Dateien, Lesen Sie die Zeile für Schleife und ist speicherfreundlich und verwendet verwendet, um die Ressourcenfreigabe zu gewährleisten. 2. Datei.Readlines () bietet einen kurzen Code, der für Szenarien geeignet ist, die nur einmal durchquert werden müssen, faulen Laden unterstützt und Codierung angeben können. Wenn Sie mehrmals auf den Dateiinhalt zugreifen müssen, wird file.readalllines () empfohlen. Die beiden erkennen die Codierung automatisch standardmäßig. Um verstümmelten Code zu vermeiden, wird empfohlen, die Codierung.UTF8 und ENC nach Bedarf explizit anzugeben.

Auswählen des richtigen C# -Sammlungstyps für die Leistung Auswählen des richtigen C# -Sammlungstyps für die Leistung Aug 01, 2025 am 03:47 AM

Durch die Auswahl des richtigen Sammlungstyps kann die C# -Programmleistung erheblich verbessert werden. 1. Fügen Sie die verlinkte Liste häufig in die Mitte ein oder löschen Sie sie in der Mitte, 2. Suchen Sie schnell mit Hashset oder Wörterbuch, 3. Die Anzahl der Elemente wurde zuerst Arrays verwendet, 4. Wählen Sie Hashset, wenn eindeutige Werte erforderlich sind.

Nutzung von C# für wissenschaftliche Computer- und Datenanalyse Nutzung von C# für wissenschaftliche Computer- und Datenanalyse Aug 05, 2025 am 06:19 AM

C#CANBEUSEUTFORSCIENTIFISCHCOMPUTINGANDDATAANYSEBYSETINGUPAPROPERENVIRIONENT, LeveragingRelevantlibrary und optimizingPerformance.First, InstallvisualStudioorvScodewiththe.netsdkastheFoundation.Next, uenugetpackagesslikemath.NetNETERICHERICRALALGELALGERALGE

See all articles