この記事では、Unity での条件付き依存関係の解決の概念を詳しく掘り下げ、提供されたコードサンプル。
条件付き解決
条件付き解決を使用すると、特定の条件に基づいてオブジェクトを構築できます。この場合、Unity がユーザーの認証方法に基づいて適切な認証プロバイダー (Twitter または Facebook) を選択するようにします。
Interfaces
これを実現するには、次のように定義します。特定の認証方法がサポートされているかを追跡する AppliesTo メソッドを備えた IAuthenticate インターフェイス
public interface IAuthenticate{ bool Login(string user, string pass); bool AppliesTo(string providerName); }
認証プロバイダー
各認証プロバイダー (Twitter および Facebook) に対して、IAuthenticate インターフェイスを実装し、AppliesTo メソッドをオーバーライドして、それが処理するかどうかを指定します。指定された認証method.
public class TwitterAuth : IAuthenticate { ... bool AppliesTo(string providerName) { // Check if this class name matches the provider name } }
Strategy
認証を実行するための中心点として機能する IAuthenticateStrategy インターフェイスを作成します。この戦略には、providerName に基づいて適切なプロバイダーを選択するメソッドが含まれています。
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 中国語 Web サイトの他の関連記事を参照してください。