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
Linda Hamiltonoriginal
2024-12-29 13:40:11599parcourir

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);
}

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

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);
}

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")
    ))
);

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) {...}

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!

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