自訂 AuthorizeAttribute 依賴注入挑戰
問題:
直接依賴項注入(使用屬性注入)到自訂 AuthorizeAttribute
類別通常會失敗,導致執行時間依賴屬性為空。
為什麼屬性中的依賴注入會出現問題:
有幾個因素使得對屬性的依賴注入變得困難並且通常是不可取的:
-
建構函式註入不可行:屬性在建立過程中無法輕易攔截,從而阻止建構函式註入。
-
時間耦合:屬性注入引入了有問題的時間耦合。
-
容器驗證問題:它使容器配置驗證變得複雜。
-
快取衝突:框架屬性快取可能會導致意外的依賴問題和錯誤。
有效的替代方案:
方法一:解耦屬性(被動屬性)
-
單獨關注點:建立專用服務來封裝邏輯並管理依賴關係。
-
屬性角色:屬性充當簡單的包裝器,解析和呼叫服務的方法。
方法 2:服務定位器模式
-
服務封裝:將所有屬性邏輯移至管理相依性的專用服務。
-
服務註冊:使用依賴注入容器註冊此服務。
-
服務解析:在屬性內,使用服務定位器來解析和呼叫服務的方法。
最佳實務:
-
方法 1(解耦屬性): 建議用於更簡潔的設計,特別是在管理多個屬性或跨不同程序集工作時。
-
方法 2(服務定位器):針對嚴格屬性隔離較不重要的簡單場景的實用解決方案。
透過採用這些策略,開發人員可以有效地管理依賴關係,而不會損害基於屬性的程式碼的完整性和可維護性。
以上是如何成功地將依賴項注入自訂 AuthorizeAttributes?的詳細內容。更多資訊請關注PHP中文網其他相關文章!