Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
📦 Microsoft.Extensions.DependencyInjection.AutoActivation NuGet-paketet innehåller funktioner för att automatiskt aktivera singleton-tjänster vid programstart i stället för att vänta på deras första användning. Den här metoden kan hjälpa till att minimera svarstiden för inledande begäranden genom att se till att tjänsterna är redo att hantera begäranden omedelbart när programmet startar.
När du ska använda automatisk aktivering
Automatisk aktivering är fördelaktigt i scenarier där:
- Du vill minimera svarstiden för den första begäran genom att undvika kostnaderna för lat initiering.
- Tjänster måste utföra initieringsarbete vid start, till exempel att värma upp cacheminnen eller upprätta anslutningar.
- Du vill ha konsekventa svarstider redan från starten av applikationens livslängd.
- Tjänster har dyra konstruktorer som du vill köra under start i stället för under bearbetning av begäranden.
Kom igång
För att komma igång med automatisk aktivering installerar du NuGet-paketet Microsoft.Extensions.DependencyInjection.AutoActivation.
dotnet add package Microsoft.Extensions.DependencyInjection.AutoActivation
Mer information finns i dotnet add package or Hantera paketberoenden i .NET program.
Registrera tjänster för automatisk aktivering
Paketet för automatisk aktivering innehåller tilläggsmetoder för att registrera tjänster som aktiveras automatiskt när tjänstleverantören skapas. Det finns flera sätt att registrera tjänster för automatisk aktivering:
AddActivatedSingleton
Metoden AddActivatedSingleton registrerar en tjänst som en singleton och ser till att den aktiveras vid start:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddActivatedSingleton<MyService>();
ServiceProvider provider = services.BuildServiceProvider();
I det här exemplet MyService instansieras när BuildServiceProvider() anropas, inte när det först begärs från tjänstleverantören.
ActivateSingleton
Metoden ActivateSingleton markerar en redan registrerad singleton-tjänst för aktivering vid start:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddSingleton<MyService>();
services.ActivateSingleton<MyService>();
ServiceProvider provider = services.BuildServiceProvider();
Den här metoden är användbar när du har befintliga tjänstregistreringar som du vill aktivera vid start utan att ändra registreringskoden.
TryAddActivatedSingleton
Metoden TryAddActivatedSingleton registrerar villkorligt en tjänst för automatisk aktivering endast om den inte redan har registrerats:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.TryAddActivatedSingleton<MyService>();
services.TryAddActivatedSingleton<MyService>(); // This has no effect
ServiceProvider provider = services.BuildServiceProvider();
Den här metoden följer samma mönster som andra TryAdd* metoder i beroendeinmatningsramverket, vilket säkerställer att tjänsterna bara registreras en gång.
Fullständigt exempel
Här är ett fullständigt exempel som visar hur du använder automatisk aktivering i ett konsolprogram:
public class CacheWarmer
{
public CacheWarmer()
{
Console.WriteLine("Warming up cache at startup...");
// Perform expensive initialization
WarmUpCache();
}
private void WarmUpCache()
{
// Cache warming logic here
Console.WriteLine("Cache warmed up successfully!");
}
}
När det här programmet startar visas meddelandena från CacheWarmer konstruktorn som skrivs ut innan programmet börjar bearbeta begäranden, vilket bekräftar att tjänsten aktiverades vid start.
Automatisk aktivering med beroenden
Automatiskt aktiverade tjänster kan vara beroende av andra tjänster via beroendeinmatning:
public class StartupTaskRunner
{
private readonly ILogger<StartupTaskRunner> _logger;
public StartupTaskRunner(ILogger<StartupTaskRunner> logger)
{
_logger = logger;
_logger.LogInformation("Running startup tasks...");
RunTasks();
}
private void RunTasks()
{
// Execute startup tasks
_logger.LogInformation("Startup tasks completed.");
}
}
I det här exemplet beror tjänsten StartupTaskRunner på ILogger<StartupTaskRunner>, som automatiskt tillhandahålls av containern för beroendeinmatning.
Bästa praxis
När du använder automatisk aktivering bör du överväga följande metodtips:
- Endast för singletons: Automatisk aktivering är utformad för singleton-tjänster. Tjänster med kortare livslängd (begränsade eller tillfälliga) bör inte aktiveras automatiskt.
- Håll starten snabb: Automatiskt aktiverade tjänster bör slutföra sin initiering snabbt för att undvika att fördröja programstarten. Överväg att använda bakgrundstjänster eller värdbaserade tjänster för längre initiering.
- Hantera fel på ett korrekt sätt: Undantag som utlöses under byggandet av automatiskt aktiverade tjänster hindrar programmet från att starta. Se till att robust felhantering finns i tjänstkonstruktorer.
- Överväg värdbaserade tjänster: För tjänster som behöver utföra pågående arbete eller asynkron initiering bör du överväga att använda IHostedService i stället för automatisk aktivering.