Maison >développement back-end >C++ >Comment puis-je résoudre manuellement les services dans la méthode « ConfigureServices » d'ASP.NET Core ?
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éthodeConfigureServices
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!