Maison >développement back-end >C++ >Comment puis-je résoudre les instances DI ASP.NET Core dans ConfigureServices ?

Comment puis-je résoudre les instances DI ASP.NET Core dans ConfigureServices ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 08:37:07228parcourir

How Can I Resolve ASP.NET Core DI Instances within ConfigureServices?

Dans ASP.NET Core MVC, le mécanisme d'injection de dépendances (DI) est utilisé pour gérer la création et le cycle de vie des dépendances d'application. La méthode ConfigureServices est généralement utilisée pour enregistrer les dépendances, mais elle ne crée initialement qu'une collection IServiceCollection qui sert de modèle pour le conteneur DI.

Pour résoudre manuellement l'instance de service, nous devons obtenir un IServiceProvider qui contient le conteneur entièrement composé. Il existe plusieurs façons d'y parvenir :

Injection de dépendances via le constructeur

L'injection de services dans le constructeur de la classe Startup permet un accès direct aux services intégrés dans les méthodes ConfigureServices, par exemple IConfiguration :

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

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        // 在此处使用 Configuration
    }
}</code>

Résoudre manuellement les dépendances dans la méthode Configure

Dans la méthode Configure, IApplicationBuilder permet d'accéder directement à IServiceProvider :

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

Résolution des dépendances dans ConfigureServices

Pour résoudre les dépendances directement dans ConfigureServices vous devez faire appel à un prestataire intermédiaire :

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

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

Remarques

La résolution manuelle des dépendances (localisateurs de services) n'est généralement pas recommandée car elle peut réduire la maintenabilité et la testabilité. Préférez injecter des dépendances autant que possible.

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