Maison > développement back-end > C++ > Comment l'injection de dépendances d'Unity peut-elle gérer l'authentification conditionnelle basée sur la sélection du fournisseur ?

Comment l'injection de dépendances d'Unity peut-elle gérer l'authentification conditionnelle basée sur la sélection du fournisseur ?

Linda Hamilton
Libérer: 2024-12-29 13:40:11
original
601 Les gens l'ont consulté

How can Unity's dependency injection handle conditional authentication based on provider selection?

Résolution des dépendances conditionnelles dans Unity

Dans cet article, nous approfondirons le concept de résolution des dépendances conditionnelles dans Unity, en abordant la mise en œuvre de l'authentification conditionnelle basée sur le exemple de code fourni.

Conditionnel Résolution

La résolution conditionnelle vous permet de construire des objets basés sur des conditions spécifiques. Dans notre cas, nous souhaitons qu'Unity sélectionne le fournisseur d'authentification approprié (Twitter ou Facebook) en fonction de la méthode d'authentification de l'utilisateur.

Interfaces

Pour y parvenir, nous définissons une interface IAuthenticate avec une méthode AppliesTo qui suit quelle méthode d'authentification est prise en charge par un spécifique fournisseur.

public interface IAuthenticate{
    bool Login(string user, string pass);
    bool AppliesTo(string providerName);
}
Copier après la connexion

Authentifier les fournisseurs

Pour chaque fournisseur d'authentification (Twitter et Facebook), nous implémentons l'interface IAuthenticate et remplaçons la méthode AppliesTo pour spécifier s'il gère l'authentification spécifiée méthode.

public class TwitterAuth : IAuthenticate {
    ...
    bool AppliesTo(string providerName) {
        // Check if this class name matches the provider name
    }
}
Copier après la connexion

Stratégie

Nous créons une interface IAuthenticateStrategy qui sert de point central pour effectuer l'authentification. Cette stratégie comprend une méthode de sélection du fournisseur approprié en fonction du nom du fournisseur.

public interface IAuthenticateStrategy{
    bool Login(string providerName, string user, string pass);
}
Copier après la connexion

Enregistrement Unity

Dans notre configuration Unity, nous enregistrons les fournisseurs d'authentification et les instance de stratégie.

unityContainer.RegisterType<IAuthenticate, TwitterAuth>("twitterAuth");
unityContainer.RegisterType<IAuthenticate, FacebookAuth>("facebookAuth");
unityContainer.RegisterType<IAuthenticateStrategy, AuthenticateStrategy>(
    // Resolve authentication providers array
    new InjectionConstructor(new ResolvedArrayParameter<IAuthenticate>(
        new ResolvedParameter<IAuthenticate>("twitterAuth"),
        new ResolvedParameter<IAuthenticate>("facebookAuth")
    ))
);
Copier après la connexion

Utilisation

Le contrôleur d'authentification est maintenant modifié pour utiliser l'interface de stratégie.

private readonly IAuthenticateStrategy _authenticateStrategy;

public AuthenticateController(IAuthenticateStrategy authenticateStrategy) {...}

public virtual ActionResult Twitter(string user, string pass) {...}

public virtual ActionResult Facebook(string user, string pass) {...}
Copier après la connexion

Désormais, lorsque l'action de connexion est invoquée avec un nom de fournisseur spécifique, la stratégie choisira le bon fournisseur d'authentification et effectuera la connexion en conséquence.

Conception améliorée

Le modèle de stratégie divise la gestion de l'authentification de la logique du contrôleur. Cela permet une maintenance et une extensibilité plus faciles en ajoutant simplement de nouveaux fournisseurs d'authentification sans modifier le code du contrôleur.

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