所以这里的问题是:有没有办法创建一个只共享一部分代码的上下文。我真的不知道如何解释,所以我举个例子。
假设我有:
using(Context ctx = new Context())
{
ctx.Set("abc","abc");
method1();
method2();
}
和(与方法 2 相同):
public void method1()
{
Context ctx = Context.Instance();
string abc = ctx.Get("abc");
}
目标是Context.Instance()
in 方法返回在 using 中创建的对象,但它必须保持线程安全。我的意思是,如果从一个 using 外部或同时在另一个 using 内部进行调用,它将根据 using 返回上下文。如果不存在,Context.Instante()
将返回一个新的Context
(或 null,我会在之后适应,这不是重点)。
我知道这不是经典的做法,但我不想在每次调用时都传递上下文。真正的方法会有很多 subs 方法,只有 lasts 需要它,但它必须从一开始就很常见。
目标是创建一个将共享给所有(且仅)子方法的事务,但顶级方法无权访问 EF 类。我唯一的解决方案是使用会话来存储我的 EF 上下文,或者在批处理中使用静态,因为它们没有会话。这是我的目标,但问题更为笼统。
我希望我很清楚,不要犹豫,问问题。并添加标签,因为我真的不知道添加了什么标签。
谢谢 !
编辑
我可能还不够清楚。单例是不够的,静态是在所有实例之间共享的。如果两个不同的用户同时对 using 进行两次调用,则上下文对他们来说是相同的,但我希望它们不同。
理想情况下,我想允许这样的事情:
using(Context ctx = new Context())
{
ctx.Set("abc","abc");
method1();
using(Context ctx = new Context())
{
ctx.Set("abc","def");
method2();
}
method1();
}
但我觉得我要求的太多了。