Maison > développement back-end > C++ > Comment puis-je enregistrer et résoudre plusieurs implémentations d'interface avec des clés uniques dans l'injection de dépendance au cœur ASP.NET?

Comment puis-je enregistrer et résoudre plusieurs implémentations d'interface avec des clés uniques dans l'injection de dépendance au cœur ASP.NET?

Susan Sarandon
Libérer: 2025-01-29 21:31:09
original
430 Les gens l'ont consulté

How Can I Register and Resolve Multiple Interface Implementations with Unique Keys in ASP.NET Core Dependency Injection?

enregistrer et analyser plusieurs interfaces dans ASP.NET Core pour implémenter

Instruction de questions

Lors de l'utilisation des mêmes services d'interface, ils peuvent être un défi basé sur l'enregistrement et l'analyse clés uniques. Contrairement à d'autres conteneurs IOC qui sont autorisés à distinguer l'implémentation spécifique, le système DI par défaut du noyau ASP.NET semble être limité à cet égard.

Solution: utilisez Func pour commander

Afin de surmonter cette limite, elle peut être réalisée en utilisant la commission de partage de type comme schéma variable-Pass.

ServiceResolver Dans le fichier , utilisez le service transitoire et le mappage transitoires

enregistrés:
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
Copier après la connexion

Startup.cs Dans n'importe quelle classe injectée par DI, vous pouvez utiliser ServiceResolver pour obtenir le service requis:

<code class="language-csharp">services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();

services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
    switch (key)
    {
        case "A":
            return serviceProvider.GetService<ServiceA>();
        case "B":
            return serviceProvider.GetService<ServiceB>();
        case "C":
            return serviceProvider.GetService<ServiceC>();
        default:
            throw new KeyNotFoundException();
    }
});</code>
Copier après la connexion

Remarque: ServiceResolver Cette méthode utilise la touche String pour simplifier l'objectif, mais si nécessaire, vous pouvez utiliser n'importe quel type d'analyse personnalisé comme clé.

<code class="language-csharp">public class Consumer
{
    private readonly IService _aService;

    public Consumer(ServiceResolver serviceAccessor)
    {
        _aService = serviceAccessor("A");
    }

    public void UseServiceA()
    {
        _aService.DoTheThing();
    }
}</code>
Copier après la connexion
Autres précautions

Bien que cette solution résout le problème des paris clés et de l'analyse de la mise en œuvre de l'interface multiple, il est nécessaire de prêter attention aux points suivants:

Cette solution implique une cartographie manuelle.

Il ne résout pas le problème de l'injection de données statiques dans le constructeur pendant la période d'inscription. Pour cette raison, envisagez d'utiliser le mode option ou d'autres technologies.

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 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