Heim >Backend-Entwicklung >C++ >Wie kann die Abhängigkeitsinjektion von Unity die bedingte Authentifizierung basierend auf der Anbieterauswahl verarbeiten?

Wie kann die Abhängigkeitsinjektion von Unity die bedingte Authentifizierung basierend auf der Anbieterauswahl verarbeiten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-29 13:40:11599Durchsuche

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

Bedingte Abhängigkeitsauflösung in Unity

In diesem Artikel befassen wir uns mit dem Konzept der bedingten Abhängigkeitsauflösung in Unity und befassen uns mit der Implementierung der bedingten Authentifizierung basierend auf bereitgestelltes Codebeispiel.

Bedingt Auflösen

Durch die bedingte Auflösung können Sie Objekte basierend auf bestimmten Bedingungen konstruieren. In unserem Fall möchten wir, dass Unity basierend auf der Authentifizierungsmethode des Benutzers den geeigneten Authentifizierungsanbieter (Twitter oder Facebook) auswählt.

Schnittstellen

Um dies zu erreichen, definieren wir eine IAuthenticate-Schnittstelle mit einer ApplyTo-Methode, die nachverfolgt, welche Authentifizierungsmethode von einer bestimmten unterstützt wird Anbieter.

public interface IAuthenticate{
    bool Login(string user, string pass);
    bool AppliesTo(string providerName);
}

Anbieter authentifizieren

Für jeden Authentifizierungsanbieter (Twitter und Facebook) implementieren wir die IAuthenticate-Schnittstelle und überschreiben die Methode „AppliesTo“, um anzugeben, ob sie verarbeitet wird die angegebene Authentifizierung Methode.

public class TwitterAuth : IAuthenticate {
    ...
    bool AppliesTo(string providerName) {
        // Check if this class name matches the provider name
    }
}

Strategie

Wir erstellen eine IAuthenticateStrategy-Schnittstelle, die als zentraler Punkt für die Durchführung der Authentifizierung dient. Diese Strategie beinhaltet eine Methode zur Auswahl des geeigneten Anbieters basierend auf dem Anbieternamen.

public interface IAuthenticateStrategy{
    bool Login(string providerName, string user, string pass);
}

Unity-Registrierung

In unserer Unity-Konfiguration registrieren wir die Authentifizierungsanbieter und die Strategieinstanz.

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

Verwendung

Der authentifizierte Controller ist Jetzt geändert, um die Strategieschnittstelle zu verwenden.

private readonly IAuthenticateStrategy _authenticateStrategy;

public AuthenticateController(IAuthenticateStrategy authenticateStrategy) {...}

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

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

Wenn jetzt die Anmeldeaktion mit einem bestimmten Anbieternamen aufgerufen wird, wählt die Strategie den richtigen Authentifizierungsanbieter aus und führt die Anmeldung entsprechend durch.

Verbessertes Design

Das Strategiemuster trennt die Authentifizierungsverarbeitung von der Controller-Logik. Dies ermöglicht eine einfachere Wartung und Erweiterbarkeit durch einfaches Hinzufügen neuer Authentifizierungsanbieter, ohne den Controller-Code zu ändern.

Das obige ist der detaillierte Inhalt vonWie kann die Abhängigkeitsinjektion von Unity die bedingte Authentifizierung basierend auf der Anbieterauswahl verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn