C# 可变范围抽象

C# 可变范围抽象,c#,.net,C#,.net,我需要“static”变量,该变量的作用域是每个查询,而不是每个应用程序。我将在下面对此进行详细描述,以便: 我有一个计算查询的过程。每个查询都需要自己的ID,我可以并行处理多个查询。它基本上看起来像: OnServiceStart(){ var env = new Environement(); env.SetValue(...); ... } ProcessQuery(string query){ var id = Guid.NewId(); var eva

我需要“
static
”变量,该变量的作用域是每个查询,而不是每个应用程序。我将在下面对此进行详细描述,以便:

我有一个计算查询的过程。每个查询都需要自己的ID,我可以并行处理多个查询。它基本上看起来像:

OnServiceStart(){
   var env = new Environement();
   env.SetValue(...);
   ...
}

ProcessQuery(string query){
   var id = Guid.NewId();

   var evaluator = CreateEvaluatorBasedOnQuery();
   evaluator.Evaluate();
}
我还有一个非常简单的类,它保存了我的环境变量:

public class Environment
{
    private static readonly ConcurrentDictionary<string, object> Objects;

    static Environment()
    {
        Objects = new ConcurrentDictionary<string, object>();
    }

    public T Value<T>(string name)
    {
        return (T) Objects[name];
    }

    public void SetValue<T>(string name, T value)
    {
        if (!Objects.TryAdd(name, value))
            Objects.TryUpdate(name, value, Objects[name]);
    }

    ...
}
但是,每个查询的
EnvironmentServiceHelper.TempFolderKey
需要稍有不同,因此我希望它是
$“{Path.GetTempPath()}\{id}”

我的要求是它对evaluator类应该是完全透明的。我无法传递id,所以这样的代码无效

Environment env = new Environemnt();
env.GetValue(...)

evaluator.Evaluate(id);
GetValue(…)
必须返回
$“{Path.GetTempPath()}\{id}”
,其中每个查询的id都不同


无法理解如何构建适当的抽象来实现这一点。目前,我希望通过使用不同的
AppDomain
来避免实现它。有人能给我一些提示吗?

为什么不创建一个分层的
环境呢?内部环境保留全局属性,外部环境保留查询特定的属性?这个对象被传递给每个需要它的方法

从以下构造函数开始:

Environment env = new Environment(originalEnvironment);

根据您的意愿,您可以将所有值从
原始环境
复制到新实例化的
环境
,或者保留一个引用。

我不确定是否正确获取了您的值,但您可能需要ThreadStaticAttribute。我将测试它。这似乎是个好主意!
Environment env = new Environment(originalEnvironment);