Injection de dépendances ASP.NET Core : accès aux services en dehors de IServiceCollection
Dans ASP.NET Core, le IServiceCollection
est crucial pour l'enregistrement des dépendances au sein du système d'injection de dépendances (DI). Cependant, des situations peuvent survenir dans lesquelles vous devez résoudre les services directement, en contournant l'injection standard.
Accès aux services directement depuis IServiceCollection
Le IServiceCollection
lui-même n'offre pas de résolution de service ; son objectif est uniquement de configurer le conteneur DI. Une fois configuré, ce conteneur se transforme en IServiceProvider
.
Injecter le ServiceProvider
Pour une résolution manuelle du service, injectez le IServiceProvider
dans votre classe. IApplicationBuilder
et HttpContext
fournissent un accès via leurs propriétés ApplicationServices
et RequestServices
, respectivement.
Utilisation du fournisseur de services
Les IServiceProvider
proposent GetService(Type type)
de récupération de services en fonction de leur type. Pour plus de commodité, utilisez des méthodes d'extension telles que GetService<TService>()
(nécessite using Microsoft.Extensions.DependencyInjection;
).
Résolution de service au sein de la classe startup
Injection de dépendances au démarrage
La classe Startup
peut accepter des dépendances injectées dans son constructeur, telles que IConfiguration
et IWebHostEnvironment
(ou IHostingEnvironment
dans les versions antérieures à 3.0).
Dans ConfigureServices()
, utilisez ces services injectés pour enregistrer d'autres dépendances.
Résolution manuelle des dépendances au démarrage
Pour résoudre les services au sein ConfigureServices()
, créez un IServiceProvider
intermédiaire à partir du IServiceCollection
. Cela permet d'accéder aux services enregistrés jusque-là.
Exploiter les services d'application
Dans la méthode Configure()
, résolvez les services en utilisant IApplicationBuilder.ApplicationServices
. Cela accède aux services configurés pour l'application.
Éviter l'anti-modèle du localisateur de service
La résolution directe du service est généralement déconseillée car elle représente l'anti-modèle "Service Locator". Bien que parfois nécessaire, elle doit être évitée autant que possible au profit de l'injection de constructeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!