Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het 📦 Microsoft.Extensions.DependencyInjection.AutoActivation NuGet-pakket biedt functionaliteit voor het automatisch activeren van singleton-services bij het opstarten van toepassingen, in plaats van te wachten op hun eerste gebruik. Deze aanpak kan helpen bij het minimaliseren van de latentie voor initiële aanvragen door ervoor te zorgen dat services direct klaar zijn om aanvragen te verwerken wanneer de toepassing wordt gestart.
Wanneer gebruikt u automatische activering
Automatische activering is nuttig in scenario's waarbij:
- U wilt de latentie van de eerste aanvraag minimaliseren door de overhead van luie initialisatie te voorkomen.
- Services moeten initialisatiewerkzaamheden uitvoeren bij het opstarten, zoals het opwarmen van caches of het tot stand brengen van verbindingen.
- U wilt consistente reactietijden vanaf het begin van de levensduur van uw toepassing.
- Services hebben dure constructors die u wilt uitvoeren tijdens het opstarten in plaats van tijdens het verwerken van aanvragen.
Aan de slag
Als u wilt beginnen met de automatische activering, installeert u het NuGet-pakket Microsoft.Extensions.DependencyInjection.AutoActivation.
dotnet add package Microsoft.Extensions.DependencyInjection.AutoActivation
Zie dotnet add package or Manage package dependencies in .NET applications voor meer informatie.
Services registreren voor automatische activering
Het pakket voor automatische activering biedt uitbreidingsmethoden voor het registreren van services die automatisch worden geactiveerd wanneer de serviceprovider wordt gebouwd. Er zijn verschillende manieren om services te registreren voor automatische activering:
AddActivatedSingleton
De AddActivatedSingleton methode registreert een service als een singleton en zorgt ervoor dat deze wordt geactiveerd bij het opstarten:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddActivatedSingleton<MyService>();
ServiceProvider provider = services.BuildServiceProvider();
In dit voorbeeld wordt MyService geïnitieerd wanneer BuildServiceProvider() wordt aangeroepen, niet wanneer het voor het eerst bij de serviceprovider wordt aangevraagd.
ActivateSingleton
De ActivateSingleton methode markeert een reeds geregistreerde singleton-service voor activering bij het opstarten:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.AddSingleton<MyService>();
services.ActivateSingleton<MyService>();
ServiceProvider provider = services.BuildServiceProvider();
Deze methode is handig wanneer u bestaande serviceregistraties hebt die u wilt activeren bij het opstarten zonder de registratiecode te wijzigen.
TryAddActivatedSingleton (activeerce Singleton toevoegen)
Met de TryAddActivatedSingleton methode wordt een service voorwaardelijk geregistreerd voor automatische activering als deze nog niet is geregistreerd:
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
services.TryAddActivatedSingleton<MyService>();
services.TryAddActivatedSingleton<MyService>(); // This has no effect
ServiceProvider provider = services.BuildServiceProvider();
Deze methode volgt hetzelfde patroon als andere TryAdd* methoden in het afhankelijkheidsinjectieframework, zodat services slechts eenmaal worden geregistreerd.
Volledig voorbeeld
Hier volgt een volledig voorbeeld van het gebruik van automatische activering in een consoletoepassing:
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!");
}
}
Wanneer deze toepassing wordt gestart, ziet u de berichten van de CacheWarmer constructor die worden afgedrukt voordat de toepassing aanvragen verwerkt, wat bevestigt dat de service bij het opstarten is geactiveerd.
Automatische activering met afhankelijkheden
Automatisch geactiveerde services kunnen afhankelijk zijn van andere services via afhankelijkheidsinjectie:
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.");
}
}
In dit voorbeeld is de StartupTaskRunner-service afhankelijk van ILogger<StartupTaskRunner>, die automatisch wordt geleverd door de afhankelijkheidsinjectie-container.
Goede praktijken
Houd bij het gebruik van automatische activering rekening met de volgende aanbevolen procedures:
- Alleen voor singletons gebruiken: Automatische activering is ontworpen voor singleton-services. Services met een kortere levensduur (gescopeerd of tijdelijk) mogen niet automatisch geactiveerd worden.
- Snel opstarten behouden: automatisch geactiveerde services moeten hun initialisatie snel voltooien om te voorkomen dat de applicatiestart wordt vertraagd. Overweeg het gebruik van achtergrondservices of gehoste services voor langere initialisatie.
- Fouten probleemloos afhandelen: Uitzonderingen die zijn gegenereerd tijdens de bouw van automatisch geactiveerde services, verhinderen dat de toepassing wordt gestart. Zorg voor robuuste foutafhandeling in serviceconstructors.
- Overweeg gehoste services: Voor services die doorlopend werk of asynchrone initialisatie moeten uitvoeren, kunt u overwegen in plaats van automatische activering te gebruiken IHostedService .