Maison > développement back-end > C++ > Comment puis-je résoudre les services dans ASP.NET Core DI au-delà de IServiceCollection ?

Comment puis-je résoudre les services dans ASP.NET Core DI au-delà de IServiceCollection ?

Linda Hamilton
Libérer: 2025-01-17 08:51:13
original
728 Les gens l'ont consulté

How Can I Resolve Services in ASP.NET Core DI Beyond the IServiceCollection?

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal