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

Comment puis-je résoudre manuellement les services dans la méthode « ConfigureServices » d'ASP.NET Core ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 08:46:08370parcourir

How Can I Manually Resolve Services within ASP.NET Core's `ConfigureServices` Method?

Résoudre manuellement le service dans la méthode ConfigureServices d'ASP.NET Core

ASP.NET Core utilise l'interface IServiceCollection pour créer un conteneur d'injection de dépendances (DI). Une fois construit, il est composé d'une instance IServiceProvider qui vous permet de résoudre les services. Cet article explique comment analyser manuellement les instances dans la méthode ConfigureServices.

Injecter des dépendances

La méthode

ConfigureServices ne permet pas l'injection de services, vous pouvez donc injecter des services dans le constructeur de la classe Startup, tels que IConfiguration, IWebHostEnvironment et ILoggerFactory.

<code class="language-csharp">public Startup(IConfiguration configuration) => Configuration = configuration;

public void ConfigureServices(IServiceCollection services) => services.AddScoped<IFooService>();</code>

Résoudre manuellement les dépendances dans Configure()

Vous pouvez résoudre manuellement le service dans la méthode IApplicationBuilder en utilisant l'attribut ApplicationServices de Configure() :

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

Résoudre manuellement les dépendances dans ConfigureServices()

Pour résoudre les services dans ConfigureServices, utilisez BuildServiceProvider() pour construire un IServiceProvider intermédiaire pour accéder aux services enregistrés jusqu'à ce point :

<code class="language-csharp">public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IFooService>();
    var sp = services.BuildServiceProvider();
    var fooService = sp.GetService<IFooService>();
}</code>

Attention :

Évitez de résoudre les services dans ConfigureServices car cela devrait se concentrer sur la configuration des services d'application. Envisagez de lier manuellement la valeur de IConfiguration à l'instance, ou d'utiliser des surcharges de AddSingleton/AddScoped/AddTransient pour créer paresseusement l'instance.

La résolution manuelle des services (localisateurs de services) est un anti-modèle et doit être utilisée avec prudence.

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