Maison > développement back-end > C++ > Comment enregistrer et résoudre plusieurs implémentations d'interface dans ASP.NET Core?

Comment enregistrer et résoudre plusieurs implémentations d'interface dans ASP.NET Core?

Susan Sarandon
Libérer: 2025-01-29 21:21:12
original
398 Les gens l'ont consulté

How to Register and Resolve Multiple Interface Implementations in ASP.NET Core?

Enregistrez plusieurs interfaces dans ASP.NET Core pour atteindre

Dans ASP.NET Core, en raison du manque d'enregistrement explicite basé sur la clé, les services multiples enregistrés pour réaliser la même interface apporteront des défis. Ce qui suit est une solution complète, qui est utilisée pour résoudre ce problème et éviter les lacunes du modèle d'usine:

Inscrivez-vous pour implémenter une implémentation spécifique

Implémentation multiple de l'interface d'enregistrement, veuillez utiliser la méthode plusieurs fois et utiliser différents types:

AddTransient Parser de service personnalisé

<code class="language-csharp">services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();</code>
Copier après la connexion

Créer une commission personnalisée appelée , il reçoit une clé de chaîne et renvoie l'exemple de service correspondant:

Dans la méthode , enregistrez un analyseur personnalisé: ServiceResolver

<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
Copier après la connexion
s'appuyant dans l'utilisateur pour injecter

ConfigureServices

Injecter dans les utilisateurs, permettez-leur d'analyser des services spécifiques:
<code class="language-csharp">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

Injecter le constructeur à l'aide de données statiques pour injecter

Pour injecter les données statiques dans le constructeur pendant la période d'enregistrement, veuillez définir une méthode de retour d'une instance de service et accepter les données nécessaires en tant que paramètre: ServiceResolver

<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
Enregistrez l'usine en un seul cas pour s'assurer qu'elle est disponible dans tout le cycle de vie de l'application:

Dans la méthode , le type de service est lié à la méthode d'usine:

Grâce à cette méthode, vous pouvez vous inscrire et résoudre de manière transparente la mise en œuvre multiple de l'interface, injecter des données statiques dans le constructeur, éviter les lacunes du mode d'usine et respecter le principe d'injection de dépendance dans le noyau ASP.NET.
<code class="language-csharp">public class ServiceFactory
{
    public ServiceA CreateServiceA(string efConnectionString)
    {
        return new ServiceA(efConnectionString);
    }

    // ... (其他服务的类似方法)
}</code>
Copier après la connexion

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!

source:php.cn
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