2017-07-28 48 views
2

我正在創建每個請求的用戶上下文。像這樣的東西,但它只是感覺不對:每個請求的依賴關係注入的用戶上下文

container.Register<UserContext>(() => 
{ 
    var context = new UserContext(); 
    //add runtime data...     
    return context; 
}); 

然後將其注入基礎服務層類以供重用。

任何人都可以指出一個更好的方向來實現這個目標嗎?

在此先感謝。

回答

2

對象圖的構造應該是reliable,所以我們可以構造它們with confidence。這基本上意味着we shouldn't construct them using runtime data

HttpContext和它的屬性是運行時間數據,和對象圖施工期間訪問它:

原因模糊性,用一個額外的責任組合物根複雜化,並且使得它非常難以覈實的正確性的DI配置。

的解決方案是在這樣的方式重構UserContext,當其成員(除了其他的構造)中的一個被訪問HttpContext僅訪問。這允許UserContext在沒有關於請求的知識的情況下構建,甚至允許它變成無狀態和單身。該referenced文章顯示了這樣實現的例子:

class HttpSessionUserContext : IUserContext 
{ 
    public int CurrentUserId => (int)HttpContext.Session["userId"]; 
} 
+0

感謝您的快速反應史蒂芬,這使事情清楚,文章看起來開門見山。完美的答案。 – gdp