Maison >développement back-end >C++ >Comment puis-je résoudre manuellement les services ASP.NET Core dans « ConfigurationServices » ?

Comment puis-je résoudre manuellement les services ASP.NET Core dans « ConfigurationServices » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 08:41:091006parcourir

How Can I Manually Resolve ASP.NET Core Services in `ConfigureServices`?

Résolvez manuellement le service ASP.NET Core dans ConfigureServices

La méthode ConfigureServices utilisée pour configurer le conteneur d'injection de dépendances dans ASP.NET Core ne fournit pas de méthode directe pour résoudre les services. Pour résoudre manuellement les services à partir de cette méthode, une approche alternative est requise.

Modèle de fournisseur de services

Pour résoudre les services, ASP.NET Core utilise le modèle de fournisseur de services. Une fois la collection de services construite, elle est convertie en une instance IServiceProvider, permettant de résoudre les services.

Prestataire de services d'injection

Une façon de résoudre un service

consiste à injecter une instance IServiceProvider dans le constructeur de la classe Startup. Cependant, cette méthode ne donne accès qu’à des services nécessaires limités injectés par la couche d’hébergement.

Utilisation d'ApplicationServices

Dans la méthode Configure, IApplicationBuilder fournit l'attribut ApplicationServices, qui contient un fournisseur de services ayant accès à tous les services enregistrés.

<code class="language-csharp">public void Configure(IApplicationBuilder app)
{
    var serviceProvider = app.ApplicationServices;
    var fooService = serviceProvider.GetService<IFooService>();
}</code>

Créer un prestataire de services intermédiaire

Pour résoudre les services dans la méthode ConfigureServices, un fournisseur de services intermédiaire peut être construit à partir d'une collection de services partiellement construite. Toutefois, cela n'inclut que les services enregistrés avant cette heure.

<code class="language-csharp">public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IFooService, FooService>();

    var sp = services.BuildServiceProvider();
    var fooService = sp.GetService<IFooService>();
}</code>

Éviter l'analyse manuelle

La résolution manuelle des services n'est généralement pas recommandée car elle viole les principes d'injection de dépendances. Utilisez plutôt l’injection ou tirez parti de l’injection du fournisseur de services dans la méthode Configure.

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!

Déclaration:
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