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!