我有一个既作为控制台又作为Windows服务运行的应用程序。它处理文件,可以使用线程一次处理多个文件。每隔一段时间它就会获取一个标记为"标记的文件"作为测试文件。
流程是这样的:
所有步骤都需要知道文件是否是测试文件,但所有步骤都无法按照说法访问该文件。
我没有将bool isTest
参数传递给每个方法,而是希望创建一个仅适用于该文件和特定执行(特定于堆栈)的上下文变量。与WCF中的OperationContext
有些相似。我会使用ThreadStatic
,但我有很多async
await
,我担心线程可以被其他上下文重复使用。
有没有办法将变量保存在绑定到特定执行的某种会话或上下文中?像这样的东西(只是示例代码):
var isTest = true;
var fileProcessor = new FileProcessor(); // It's injected, but just an example.
using(ContextFactory.CreateContext(isTest))
{
// Process file.
// All methods in this stack should be able to determine if it's a testfile or not.
fileProcessor.ProcessFile(myFilePath);
}
public class FileProcessor
{
public void ProcessFile(string fileName)
{
// Should be able to determine if it's a test or not.
var isTest = ContextFactory.IsTest()
// This method will call other classes and other methods in a long chain.
}
}
我使用Unity for IoC和C#4.5。