首頁 >後端開發 >C++ >Unity 的依賴注入如何處理基於提供者選擇的條件驗證?

Unity 的依賴注入如何處理基於提供者選擇的條件驗證?

Linda Hamilton
Linda Hamilton原創
2024-12-29 13:40:11591瀏覽

How can Unity's dependency injection handle conditional authentication based on provider selection?

Unity 中的條件依賴解析

在本文中,我們將深入探討 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn