C# 如何告诉不同的类在程序执行期间保存到同一文件夹?

C# 如何告诉不同的类在程序执行期间保存到同一文件夹?,c#,file-io,session-state,C#,File Io,Session State,我有一个程序,其中典型的用例是创建一个会话,在这个会话期间,执行一些连续的数值计算,其中每个计算的结果作为参数传递给下一个 要求每个中间数值结果必须保存到磁盘,以便实现以下情况: 在会话开始时,将创建一个新的、唯一命名的文件夹 每个计算按顺序运行,每个由不同的类运行,在每个计算结束时,一些具有中间结果的文件保存在该文件夹中 在会话结束时(程序关闭后),可以选择从文件系统访问文件夹,所有文件都会在那里 我的疑问是: “我如何告诉每个类它应该保存的文件夹在哪里?” 在体系结构上,我们可以在类中使用I

我有一个程序,其中典型的用例是创建一个会话,在这个会话期间,执行一些连续的数值计算,其中每个计算的结果作为参数传递给下一个

要求每个中间数值结果必须保存到磁盘,以便实现以下情况:

  • 在会话开始时,将创建一个新的、唯一命名的文件夹
  • 每个计算按顺序运行,每个由不同的类运行,在每个计算结束时,一些具有中间结果的文件保存在该文件夹中
  • 在会话结束时(程序关闭后),可以选择从文件系统访问文件夹,所有文件都会在那里
  • 我的疑问是:

    “我如何告诉每个类它应该保存的文件夹在哪里?”


    在体系结构上,我们可以在类中使用IO代码,但是使用包含路径的“全局”值,与将构造函数中的路径传递给每个类,与另一个更合理的解决方案相比,让我感到困惑。

    将路径传递给每个类的构造函数就是所谓的依赖注入,而且它通常被认为是做事情的更好的方式,至少在一个简单的层面上。理想的解决方案是将文件编写器接口的实例注入到每个类中,这样您就可以使用模拟编写器测试每个类。不过,实现起来要复杂得多。无论哪种方式,依赖注入都在使用


    通过使用全局值,可以将代码的所有部分耦合到该值。应该避免这种耦合,因为它会导致脆弱的代码,在进行更改时很容易被破坏。原因是,在一个大型系统中,很难识别全局项上的所有依赖项,从而理解更改全局项的后果。

    将路径传递给每个类的构造函数就是所谓的依赖项注入,通常认为它是做事情的首选方法,至少在一个简单的级别上。理想的解决方案是将文件编写器接口的实例注入到每个类中,这样您就可以使用模拟编写器测试每个类。不过,实现起来要复杂得多。无论哪种方式,依赖注入都在使用


    通过使用全局值,可以将代码的所有部分耦合到该值。应该避免这种耦合,因为它会导致脆弱的代码,在进行更改时很容易被破坏。原因是,在一个大型系统中,很难识别全局项上的所有依赖项,从而理解更改全局项的后果。

    将路径传递给每个类的构造函数就是所谓的依赖项注入,通常认为它是做事情的首选方法,至少在一个简单的级别上。理想的解决方案是将文件编写器接口的实例注入到每个类中,这样您就可以使用模拟编写器测试每个类。不过,实现起来要复杂得多。无论哪种方式,依赖注入都在使用


    通过使用全局值,可以将代码的所有部分耦合到该值。应该避免这种耦合,因为它会导致脆弱的代码,在进行更改时很容易被破坏。原因是,在一个大型系统中,很难识别全局项上的所有依赖项,从而理解更改全局项的后果。

    将路径传递给每个类的构造函数就是所谓的依赖项注入,通常认为它是做事情的首选方法,至少在一个简单的级别上。理想的解决方案是将文件编写器接口的实例注入到每个类中,这样您就可以使用模拟编写器测试每个类。不过,实现起来要复杂得多。无论哪种方式,依赖注入都在使用



    通过使用全局值,可以将代码的所有部分耦合到该值。应该避免这种耦合,因为它会导致脆弱的代码,在进行更改时很容易被破坏。原因是,在大型系统中,很难识别全局项上的所有依赖项,从而了解更改全局项的后果。

    同意,传递路径是最好的方法。使用“全局”变量会更加困难,因此您需要在每次调用之前更改它。非常有趣。一个小问题:通过构造函数传递是依赖注入的主要形式还是唯一形式?我读过很多关于DI的书,但它听起来总是比简单的参数传递更深奥…@heltonbiker使用DI的方法有很多种,从简单的构造函数注入,到使用属性,一直到使用成熟的控制容器框架反转。通常使用最适合这种情况的DI形式。如果有很多值要注入,构造函数注入可能会很快变得笨拙。最后一个问题是:为了避免构造函数的混乱,您认为通过一些专用对象传递一些特定于上下文的参数(如
    path
    和其他可能的值)是否值得?这被认为是良好的做法吗?非常感谢您的关注!严格地说,您应该只注入每个类所需的值。然而,在实践中,如果每个类的需求稍有不同,则可以创建意大利面条构造函数代码(或IoC配置)。所以这是一个在理想和实际之间取得平衡的例子。如果SessionContext变得太大,那么考虑将其拆分,但是如果很小,那么这是一个很好的解决方案。同意,传递路径是最好的方式。使用“全局”变量会更加困难,因此您需要在每次调用之前更改它。非常有趣。一个小问题:通过构造函数传递是依赖注入的主要形式还是唯一形式?我读了很多关于D的书