一个用泛型隐式传递权限关键字的方法
最近和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);
}
}
{
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;
}
}
{
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("测试多租户");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库