Heim Backend-Entwicklung C++ Wie kann Unity Dependency Injection die bedingte Auflösung für mehrere Authentifizierungsanbieter verarbeiten?

Wie kann Unity Dependency Injection die bedingte Auflösung für mehrere Authentifizierungsanbieter verarbeiten?

Dec 31, 2024 pm 06:00 PM

How Can Unity Dependency Injection Handle Conditional Resolution for Multiple Authentication Providers?

Bedingte Auflösung in Dependency Injection Unity

Dependency Injection (DI) ermöglicht die automatische Injektion von Abhängigkeiten in Objekte, wodurch der manuelle Bedarf reduziert wird Instanziierung und Konfiguration. Bedingte Auflösung bezieht sich auf die Fähigkeit, verschiedene Implementierungen einer Schnittstelle basierend auf bestimmten Bedingungen dynamisch aufzulösen.

Problem:

Stellen Sie sich das folgende Szenario mit zwei Authentifizierungsanbietern vor, TwitterAuth und FacebookAuth, Implementierung der IAuthenticate-Schnittstelle:

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

public class TwitterAuth : IAuthenticate
{
    bool Login(string user, string pass) { /* connect to twitter api */ }
}

public class FacebookAuth : IAuthenticate
{
    bool Login(string user, string pass) { /* connect to fb api */ }
}
Nach dem Login kopieren

In einem Controller möchten Sie eine IAuthenticate-Implementierung basierend injizieren auf dem Authentifizierungsanbieter, der in diesem Fall durch die Aktionsmethode (z. B. Twitter oder Facebook) bestimmt wird.

Factory Pattern als Lösung:

Ein Ansatz ist Verwenden Sie das Fabrikmuster, wie von Ihrem Freund vorgeschlagen. Dies erfordert jedoch die Erstellung einer Factory-Klasse für jeden Authentifizierungsanbieter, was zu potenziellen Codeduplizierungen und Wartungsproblemen führt.

Strategiemuster mit bedingter Auflösung:

Eine flexiblere Lösung besteht darin, das Strategiemuster in Verbindung mit der Bedingung zu verwenden Auflösen:

Schnittstellen:

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

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

Authentifizierungsanbieter:

public class TwitterAuth : IAuthenticate
{
    bool Login(string user, string pass) { /* connect to twitter api */ }

    bool AppliesTo(string providerName)
    {
        return this.GetType().Name.Equals(providerName);
    }
}

public class FacebookAuth : IAuthenticate
{
    bool Login(string user, string pass) { /* connect to fb api */ }

    bool AppliesTo(string providerName)
    {
        return this.GetType().Name.Equals(providerName);
    }
}
Nach dem Login kopieren

Jeder Anbieter implementiert IAuthenticate und stellt eine bereit Methode, um festzustellen, ob sie für einen bestimmten Anbieter gilt Name.

Strategie:

public class AuthenticateStrategy : IAuthenticateStrategy
{
    private readonly IAuthenticate[] authenticateProviders;

    public AuthenticateStrategy(IAuthenticate[] authenticateProviders)
    {
        this.authenticateProviders = authenticateProviders;
    }

    public bool Login(string providerName, string user, string pass)
    {
        var provider = authenticateProviders.FirstOrDefault(x => x.AppliesTo(providerName));
        if (provider == null) throw new Exception("Login provider not registered");
        return provider.Login(user, pass);
    }
}
Nach dem Login kopieren

Die Strategie verwendet eine Reihe von IAuthenticate-Anbietern und übernimmt die bedingte Auflösung. Es durchläuft die Anbieter, um denjenigen zu finden, der dem Anbieternamen entspricht, und delegiert den Anmeldevorgang an ihn.

Unity-Registrierung:

unityContainer.RegisterType<IAuthenticate, TwitterAuth>("twitterAuth");
unityContainer.RegisterType<IAuthenticate, FacebookAuth>("facebookAuth");
unityContainer.RegisterType<IAuthenticateStrategy, AuthenticateStrategy>(
    new InjectionConstructor(
        new ResolvedArrayParameter<IAuthenticate>(
            new ResolvedParameter<IAuthenticate>("twitterAuth"),
            new ResolvedParameter<IAuthenticate>("facebookAuth")
        )
    ));
Nach dem Login kopieren

Diese Registrierung konfiguriert Unity um IAuthenticate-Implementierungen nach Anbieternamen aufzulösen und die AuthenticateStrategy mithilfe dieser aufgelösten Elemente einzufügen Instanzen.

Verwendung:

private readonly IAuthenticateStrategy _authenticateStrategy;

public AuthenticateController(IAuthenticateStrategy authenticateStrategy)
{
    _authenticateStrategy = authenticateStrategy;
}

// login with twitter
public virtual ActionResult Twitter(string user, string pass)
{
    bool success = _authenticateStrategy.Login("TwitterAuth", user, pass);
}

// login with fb
public virtual ActionResult Facebook(string user, string pass)
{
    bool success = _authenticateStrategy.Login("FacebookAuth", user, pass);
}
Nach dem Login kopieren

Die AuthenticateStrategy wird in den Controller injiziert, der dann die Anmeldevorgänge basierend auf dem Anbieternamen delegiert.

Vorteile:

  • Flexibel Design: Das Hinzufügen oder Entfernen von Anmeldeanbietern ist unkompliziert und erfordert lediglich Änderungen an der Unity-Registrierung.
  • Wartbar: Reduziert Duplikate und verbessert die Lesbarkeit des Codes, da der anbieterspezifische Code darin enthalten ist separate Klassen.
  • Testbar: Das Strategiemuster ermöglicht einfachere Unit-Tests der individuellen Authentifizierung Anbieter.

Das obige ist der detaillierte Inhalt vonWie kann Unity Dependency Injection die bedingte Auflösung für mehrere Authentifizierungsanbieter verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

See all articles