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 중국어 웹사이트의 기타 관련 기사를 참조하세요!