我最近重構了我的MVC應用程序以使用Unity依賴注入來解決依賴關係,這非常棒。它更易於分解等等。Unity - 使用請求中的信息來解決依賴關係
我現在正在做的是爲多個租戶添加功能來使用它。我使用的方法(以便其餘代碼不必知道租戶多少)正在創建諸如租戶過濾版本的存儲庫接口(這只是另一個存儲庫的代理...)所以它會調用其中一個底層方法,然後檢查記錄是否有合適的租戶並相應地執行)。這讓我基本上可以模擬爲每個租戶設置一個完全獨立的存儲,即使數據在數據不隔離的情況下也是如此,所以客戶代碼的相對較少需要更改。
所有這一切的問題是它如何適應DI方式的做事。我打算做的是,在請求開始時,檢測主機名,然後使用它來確定租戶(每個租戶都將擁有數據庫中的主機名列表)。雖然我正在使用每個請求的生命期來處理Unity正在構建和解決的大多數對象,但我並沒有真正瞭解Unity如何「知道」要使用的租戶,因爲它需要關於請求的數據(我想控制器會有,但我不認爲在我的容器配置方法中可用)和訪問數據庫以瞭解哪個主機(並且幾乎不需要讓我的容器配置進行數據庫調用)。我可以通過只傳遞一個主機名來解決#2,並讓租戶的類去確定哪個租戶被引用,但這對#1沒有幫助。
現在我正在使用「財產注入」(也被稱爲「一個公共財產」在較低的高度falutin'圈子),但我不明白我將如何避免讓我的控制器成爲一個實際提供租戶數據,所以現在我不是真的只有一個組合根控制一切。
有沒有一種方法可以在組合根中做到這一點,或者我應該讓自己屈服於讓控制器完成這項工作?
但是我怎樣才能找到該方法的網址?這一點不在範圍內,是嗎? – Casey
我想我可以用這種方式真正簡潔地描述我的問題:做我想做的事情我需要訪問組合根內的請求數據,但據我所知我沒有訪問當我配置容器時的任何當前請求上下文。 – Casey
'HttpContext.Current.Request.Url' –