Dela via


Tjänstlivslängd

Tjänster kan registreras med en tillfällig, begränsad eller singleton-livslängd . Välj en lämplig livslängd för varje registrerad tjänst.

Transient

En tjänst med en tillfällig livslängd skapas varje gång den begärs från tjänstcontainern. Om du vill registrera en tjänst som tillfällig anropar du AddTransient.

I appar som bearbetar begäranden tas tillfälliga tjänster bort i slutet av begäran. Den här livslängden medför allokeringar per begäran, eftersom tjänster löses och konstrueras varje gång. Mer information finns i IDisposable-vägledning för tillfälliga och delade instanser.

Omfattad

För webbprogram anger en begränsad livslängd att tjänster skapas en gång per klientbegäran (anslutning). I appar som bearbetar begäranden tas begränsade tjänster bort i slutet av begäran. Registrera begränsade tjänster genom att anropa AddScoped.

Anmärkning

När du använder Entity Framework Core AddDbContext registrerar DbContext tilläggsmetoden typer med en begränsad livslängd som standard.

En begränsad tjänst ska alltid användas inom ett omfång – antingen ett implicit omfång (till exempel ASP.NET Cores omfång per begäran) eller ett explicit omfång som skapats med IServiceScopeFactory.CreateScope().

Lös inte en begränsad tjänst direkt från en singleton med konstruktorinmatning eller genom att begära den från IServiceProvider i singletonen. Detta gör att den begränsade tjänsten fungerar som en singleton, vilket kan leda till felaktigt tillstånd när efterföljande begäranden bearbetas.

Det är acceptabelt att anropa en tjänst med begränsat omfång i en singleton om du skapar och använder ett explicit omfång med IServiceScopeFactory.

Det är också bra att:

  • Lös en singleton-tjänst från en begränsad eller tillfällig tjänst.
  • Lös en begränsad tjänst från en annan begränsad eller tillfällig tjänst.

I utvecklingsmiljön genererar som standard en lösning av en tjänst från en annan tjänst med längre livslängd ett undantag. Mer information finns i Omfångsverifiering.

Singleton

Singleton Lifetime-tjänster skapas antingen:

  • Första gången de begärs.
  • Av utvecklaren när du tillhandahåller en implementeringsinstans direkt till containern. Den här metoden behövs sällan.

Varje efterföljande begäran om tjänstimplementeringen från containern för beroendeinmatning använder samma instans. Om appen kräver singleton-beteende tillåter du att tjänstcontainern hanterar tjänstens livslängd. Implementera inte designmönstret för singleton och ange kod för att ta bort singletonen. Tjänster ska aldrig tas bort med kod som löste tjänsten från containern. Om en typ eller fabrik registreras som en singleton, tas singletonen automatiskt bort av containern.

Registrera singleton-tjänster med AddSingleton. Singleton-tjänster måste vara trådsäkra och används ofta i tillståndslösa tjänster.

I appar som bearbetar begäranden tas singleton-tjänster bort när de ServiceProvider tas bort vid programavstängning. Eftersom minnet inte släpps förrän appen stängs av bör du överväga minnesanvändning med en singleton-tjänst.