이 글에서는 Unity의 조건부 종속성 해결 개념을 자세히 알아보고, 코드 샘플 제공.
조건부 해석
조건부 해석을 사용하면 특정 조건에 따라 객체를 구성할 수 있습니다. 우리의 경우 Unity가 사용자의 인증 방법에 따라 적절한 인증 공급자(Twitter 또는 Facebook)를 선택하기를 원합니다.
인터페이스
이를 달성하기 위해 다음을 정의합니다. 특정 인증 방법이 지원되는 인증 방법을 추적하는 AppliesTo 방법이 있는 IAuthenticate 인터페이스
public interface IAuthenticate{ bool Login(string user, string pass); bool AppliesTo(string providerName); }
인증 공급자
각 인증 공급자(Twitter 및 Facebook)에 대해 IAuthenticate 인터페이스를 구현하고 AppliesTo 메서드를 재정의하여 처리 여부를 지정합니다. 지정된 인증
public class TwitterAuth : IAuthenticate { ... bool AppliesTo(string providerName) { // Check if this class name matches the provider name } }
전략
우리는 인증 수행의 중심점 역할을 하는 IAuthenticateStrategy 인터페이스를 만듭니다. 이 전략에는 공급자 이름을 기반으로 적절한 공급자를 선택하는 방법이 포함됩니다.
public interface IAuthenticateStrategy{ bool Login(string providerName, string user, string pass); }
Unity 등록
Unity 구성에서는 인증 공급자와 전략
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") )) );
사용
인증 컨트롤러는 이제 전략 인터페이스를 사용하도록 수정되었습니다.
private readonly IAuthenticateStrategy _authenticateStrategy; public AuthenticateController(IAuthenticateStrategy authenticateStrategy) {...} public virtual ActionResult Twitter(string user, string pass) {...} public virtual ActionResult Facebook(string user, string pass) {...}
이제 로그인 특정 공급자 이름으로 작업이 호출되면 전략은 올바른 인증 공급자를 선택하고 로그인을 수행합니다.
개선된 디자인
전략 패턴은 인증 처리를 컨트롤러 로직에서 분리합니다. 이를 통해 컨트롤러 코드를 수정하지 않고도 새 인증 공급자를 추가하기만 하면 유지 관리 및 확장이 더 쉬워집니다.
위 내용은 Unity의 종속성 주입은 공급자 선택에 따라 조건부 인증을 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!