我希望能夠訪問經過身份驗證的用戶(如UserId和FirstName)的自定義屬性,而不必每次查詢數據庫。我發現this site在Stack Overflow上發表了一篇文章,我喜歡這種方法 - 但是我使用了IoC/repositories,並決定不嘗試使用global.asax來與數據庫進行通信,因爲擔心它會與存儲庫模式不兼容。ASP.NET MVC中的自定義主體
取而代之,我創建了一個CustomPrincipal的接口,並使用IoC(Castle)創建一個實例並將其傳遞給控制器(並隨後傳遞給我的基本控制器)。
基本控制器使用我在CustomPrincipal中創建的方法來實現博客作者在global.asax中提到的相同任務。即,CustomPrincipal從數據庫或緩存初始化並分配給HttpContext.Current.User。
我的控制器/視圖可以然後引用屬性如下......
((ICustomPrincipal)(HttpContext.Current.User)).FirstName;
它的工作原理,但我感應有些代碼味道。首先,如果我從控制器中引用HttpContext,我已經殺死了我的單元測試。我正在考慮修改我的CustomPrincipal對象以返回上面的值(這樣我可以在我的單元測試中嘲笑它),但我想知道這是一種解決方法,而不是一個好的解決方案。
我對此有何看法?我可以做些微小的調整來使它成爲一個可靠的解決方案,還是我應該從零開始使用FormsAuthenticationTicket或類似的東西來實現這種效果?
謝謝!
這聽起來像一個好主意 - 我打算玩這個,看看我能不能做到。謝謝! – Mayo 2010-09-21 18:33:12
沒問題。如果遇到任何障礙,請告訴我。 – StriplingWarrior 2010-09-21 18:55:46