为控制台应用程序

时间:2016-04-14 07:03:23

标签: c#

我有一个既作为控制台又作为Windows服务运行的应用程序。它处理文件,可以使用线程一次处理多个文件。每隔一段时间它就会获取一个标记为"标记的文件"作为测试文件。

流程是这样的:

  • 阅读文件
  • 确定是否测试
  • 验证文件
  • 将文件内容保存到db
  • 移动文件
  • 向其他服务报告该文件。

所有步骤都需要知道文件是否是测试文件,但所有步骤都无法按照说法访问该文件。

我没有将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。

0 个答案:

没有答案