一个用泛型隐式传递权限关键字的方法
生活随笔
收集整理的這篇文章主要介紹了
一个用泛型隐式传递权限关键字的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近和IBM在重新做公司的平臺,其中涉及多租戶問題,之前處理多租戶數據隔離時考慮很簡單,直接把權限關鍵字作為每個方法的參數傳遞給DAO。帶來的問題是在編碼過程中有部分同事經常會忘記添加,維護也有些麻煩,這次就想著將這個問題給處理掉。IBM給了一個方案,可以將權限關鍵字寫入當前執行線程中,在DAO中再從線程中取出來,但這樣限定了UI層跟DAO都只能使用同一個線程,雖然暫時不會有UI層跟DAO線程不一樣的情況,但總感覺有些不舒服。之前也一直在考慮是否可以通過一個公共方法來調用DAO,在公共方法中設置權限關鍵字,但都沒有仔細的去想,今天在整理文檔時突然想到用泛型不就能完美的解決這個問題么,于是就小實現了一下,是完全可以的。以下列出關鍵代碼。
?
?DAO部分
?
public?interface?IData????{
????????UserInfo?MyUserInfo?{?get;?set;?}
????}
?public?class?TestData?:?IData
????{
????????public?UserInfo?MyUserInfo?{?get;?set;?}
????????public?string?TestMethod(string?str)
????????{
????????????return?string.Format("Class:[TestData]?Method:[TestMethod]?User:[{0}]?Result[{1}]",?MyUserInfo.UserName,?str);
????????}
????}
?
在UI層建立一個代理,用于隱藏傳遞用戶權限關鍵信息
?
public?class?Proxy????{
????????public?static?T?GetIData<T>()?where?T?:?DAL.IData,?new()
????????{
????????????var?d?=?new?T();
????????????//從Session獲取UserInfo?并賦值給新創建的d
????????????d.MyUserInfo?=?(DAL.UserInfo)System.Web.HttpContext.Current.Session["UserInfo"];
????????????return?d;
????????}
????}
?
?
調用實例: 例如調用TestData.TestMethod Proxy.GetIData<TestData>().TestMethod("測試多租戶");?
轉載于:https://www.cnblogs.com/vanjoge/archive/2012/07/23/2605338.html
總結
以上是生活随笔為你收集整理的一个用泛型隐式传递权限关键字的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玛咖多少钱啊?
- 下一篇: 大型数据库设计原则与技巧