在本文中,我們將深入探討 Unity 中條件依賴解析的概念,解決基於提供程式碼範例。
有條件解析
條件解析使您能夠根據特定條件建構物件。在我們的例子中,我們希望 Unity 根據使用者的身份驗證方法選擇適當的身份驗證提供者(Twitter 或 Facebook)。
接口
為了實現此目的,我們定義具有AppliesTo方法的IAuthenticate接口,該方法跟踪特定的身份驗證方法所支援的方法
public interface IAuthenticate{ bool Login(string user, string pass); bool AppliesTo(string providerName); }
Authenticate Providers
對於每個驗證提供者(Twitter 和Facebook),我們實作IAuthenticate 介面並重寫AppliesTo 方法來指定它是否處理指定的認證
public class TwitterAuth : IAuthenticate { ... bool AppliesTo(string providerName) { // Check if this class name matches the provider name } }
策略
我們建立一個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中文網其他相關文章!