簡體   English   中英

ASP.NET Web Api 2中每個請求的條件依賴性解析

[英]Conditional dependency resolving per request in ASP.NET Web Api 2

我目前正在使用asp.net Web Api(5.0.0-rc1)開發Rest API。 現在我們不使用任何DI容器,所以它是窮人的DI。 但計划是盡快使用其中一種。

為了解決我們的依賴關系,我們使用自己的IHttpControllerActivator實現,類似於Mark Seemann博客中的描述。

問題

我們所有的控制器都使用服務來執行他們的操作。 我們還嘗試將控制器重用於不同的角色。 列出所有用戶的控制器具有HttpGet屬性

[HttpGet("api/role/{role}/users")]

因此,根據uri中的角色(可能是fe admindepartment ),我們希望以不同方式解析控制器的依賴關系。 這可能意味着,我們想要用裝飾器包裝服務,或者我們需要根據角色在服務中注入某種策略。

注意:依賴關系的條件解析可能在依賴關系圖中很深。

這個問題

由於我對依賴注入很陌生,所以我真的不確定解決條件依賴關系的標准方法是什么。 依賴注入是指以每個請求為基礎還是依賴圖是相當固定的,我們應該在這種情況下使用工廠? 控制器獲取ISomeServiceFactory而不是ISomeService ,工廠本身會獲得注入的角色。

我還看了一下Castle Windsor的Typed Factory Facility ,但我不確定這是否能解決我們的問題。

有多種方法可以將運行時值轉換為幾個可用依賴項(以及整個子圖)中的一個。 我寧願選擇可用的依賴項,而不是依賴工廠。

到目前為止,我已經確定了至少三種不同的方法:

其中,我個人更喜歡Partial Type Name ,因為它是最松散耦合的。

所有這些選擇策略都依賴於選擇之前可用的所有策略實例。 通常,這不是問題,因為如果它們是線程安全的,則可以在所有HTTP請求中重用每個實例。

但是,即使一個或多個服務不是線程安全的,也有辦法處理潛在的性能問題 - 最明顯的是使用虛擬代理模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM