Heim > Backend-Entwicklung > C++ > Wie kann Unity Dependency Injection verwendet werden, um verschiedene Authentifizierungsmechanismen basierend auf dem Anbietertyp bedingt aufzulösen?

Wie kann Unity Dependency Injection verwendet werden, um verschiedene Authentifizierungsmechanismen basierend auf dem Anbietertyp bedingt aufzulösen?

DDD
Freigeben: 2024-12-29 18:32:10
Original
178 Leute haben es durchsucht

How can Unity Dependency Injection be used to conditionally resolve different authentication mechanisms based on provider type?

Bedingte Auflösung in der Unity-Abhängigkeitsinjektion

Die bedingte Auflösung ermöglicht es dem Container, verschiedene Implementierungen einer Schnittstelle basierend auf bestimmten Kriterien aufzulösen und zu injizieren. In diesem Fall wollen wir Unity verwenden, um verschiedene Authentifizierungsmechanismen basierend auf der Art der verwendeten Authentifizierung (z. B. Twitter, Facebook usw.) bedingt aufzulösen.

Schnittstellen

Definieren Sie eine IAuthenticate-Schnittstelle, um das Authentifizierungsverhalten darzustellen. Fügen Sie eine ApplyTo-Methode hinzu, um zu prüfen, ob der Anbieter auf den angegebenen Anbieternamen zutrifft.

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

Authentifizierungsanbieter

Erstellen Sie separate Klassen (z. B. TwitterAuth und FacebookAuth). Implementieren Sie IAuthenticate und enthalten Sie die spezifische Authentifizierungslogik. Bestimmen Sie in der AppliesTo-Methode anhand des bereitgestellten Anbieternamens, ob der Anbieter anwendbar ist.

public class TwitterAuth : IAuthenticate
{
    bool Login(string user, string pass) { /* Logic to connect to Twitter API */ }
    bool AppliesTo(string providerName) { return this.GetType().Name.Equals(providerName); }
}
Nach dem Login kopieren

Strategie

Implementieren Sie eine IAuthenticateStrategy-Schnittstelle, um die bedingte Auflösungslogik zu kapseln . Fügen Sie ein Array von IAuthenticate-Anbietern ein und verwenden Sie die AppliesTo-Methode, um den richtigen Anbieter für die Authentifizierung auszuwählen.

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

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

    public AuthenticateStrategy(IAuthenticate[] authenticateProviders) => _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

Unity-Registrierung

Registrieren Sie die Authentifizierungsanbieter und die Strategie bei Unity, Angabe der Anbieternamen für bedingte Auflösung.

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

Verwendung

Injizieren Sie im Controller die IAuthenticateStrategy und verwenden Sie sie, um eine bedingte Authentifizierung basierend auf dem Anbieternamen durchzuführen.

public AuthenticateController(IAuthenticateStrategy authenticateStrategy)
{
    if (authenticateStrategy == null)
        throw new ArgumentNullException(nameof(authenticateStrategy));

    _authenticateStrategy = authenticateStrategy;
}

public virtual ActionResult Twitter(string user, string pass)
{
    bool success = _authenticateStrategy.Login("TwitterAuth", user, pass); /* Authenticate using Twitter */
}

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

unity.config

Alternativ Sie kann die Unity-Registrierung in der Datei unity.config durchführen.

<register type="IAuthenticate" mapTo="TwitterAuth" name="twitterAuth" />
<register type="IAuthenticate" mapTo="FacebookAuth" name="facebookAuth" />
<register type="IAuthenticateStrategy" mapTo="AuthenticateStrategy" />
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann Unity Dependency Injection verwendet werden, um verschiedene Authentifizierungsmechanismen basierend auf dem Anbietertyp bedingt aufzulösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage