> 백엔드 개발 > C++ > 공급자 유형에 따라 다양한 인증 메커니즘을 조건부로 해결하기 위해 Unity 종속성 주입을 어떻게 사용할 수 있나요?

공급자 유형에 따라 다양한 인증 메커니즘을 조건부로 해결하기 위해 Unity 종속성 주입을 어떻게 사용할 수 있나요?

DDD
풀어 주다: 2024-12-29 18:32:10
원래의
168명이 탐색했습니다.

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

Unity 종속성 주입의 조건부 해결

조건부 해결을 사용하면 컨테이너가 특정 기준에 따라 인터페이스의 다양한 구현을 확인하고 주입할 수 있습니다. 이 경우, 우리는 Unity를 사용하여 사용된 인증 유형(예: Twitter, Facebook 등)에 따라 다양한 인증 메커니즘을 조건부로 해결하는 것을 목표로 합니다.

인터페이스

인증 동작을 나타내기 위해 IAuthenticate 인터페이스를 정의합니다. AppliesTo 메소드를 추가하여 공급자가 지정된 공급자 이름에 적용되는지 확인합니다.

public interface IAuthenticate
{
    bool Login(string user, string pass);
    bool AppliesTo(string providerName);
}
로그인 후 복사

인증 공급자

TwitterAuth 및 FacebookAuth와 같은 별도의 클래스를 만듭니다. IAuthenticate를 구현하고 특정 인증 논리를 포함합니다. AppliesTo 메소드에서 제공된 공급자 이름을 기반으로 공급자가 적용 가능한지 확인합니다.

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); }
}
로그인 후 복사

Strategy

IAuthenticateStrategy 인터페이스를 구현하여 조건부 해결 논리를 캡슐화합니다. . IAuthenticate 공급자 배열을 삽입하고 AppliesTo 메서드를 사용하여 올바른 인증 공급자를 선택합니다.

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);
    }
}
로그인 후 복사

Unity 등록

인증 공급자와 전략을 다음으로 등록합니다. Unity, 조건부 제공자 이름 지정

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")
        )
    ));
로그인 후 복사

사용

컨트롤러에서 IAuthenticateStrategy를 삽입하고 이를 사용하여 공급자 기반의 조건부 인증을 수행합니다. name.

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 */
}
로그인 후 복사

unity.config

또는 unity.config 파일에서 Unity 등록을 수행할 수도 있습니다.

<register type="IAuthenticate" mapTo="TwitterAuth" name="twitterAuth" />
<register type="IAuthenticate" mapTo="FacebookAuth" name="facebookAuth" />
<register type="IAuthenticateStrategy" mapTo="AuthenticateStrategy" />
로그인 후 복사

위 내용은 공급자 유형에 따라 다양한 인증 메커니즘을 조건부로 해결하기 위해 Unity 종속성 주입을 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿