c# - 在程序中的类之间共享值的技术

标签 c# state shared

我在用

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\MyProgram"

作为存储我的程序使用的几个文件的路径。我想避免在整个应用程序中粘贴相同的代码片段。

我需要确保:

  • 路径一旦设置就不会意外更改
  • 需要它的类可以访问它。

我考虑过:

  • 让它成为单例
  • 使用构造函数依赖注入(inject)
  • 使用属性依赖注入(inject)
  • 使用 AOP 在需要的地方创建路径。

各有利弊。

单例是每个人最喜欢的替罪羊。我不反对使用它,但有充分的理由尽可能避免使用它。

我已经通过 CaSTLe Windsor 大量使用构造函数注入(inject)。但这是一个路径字符串,Windsor 不能很好地处理系统类型依赖性。我总是可以将它包装在一个类中,但对于像传递字符串值这样简单的事情来说,这似乎有点过分了。在任何情况下,此路由都会向使用它的每个类添加另一个构造函数参数。

我在这种情况下看到的属性注入(inject)问题是,从设置值的位置到需要它的位置存在大量间接。我需要一长串中间人才能到达所有使用它的地方。

AOP 看起来很有前途,我正计划使用 AOP 进行日志记录,所以这至少听起来像是一个简单的解决方案。

还有其他我没有考虑过的选择吗?我对我考虑过的选项的评估是否有偏差?

最佳答案

当有足够强烈的需求时,我从未见过为我自己的项目创建像 Environment 这样的静态类的问题。

MyAppEnvironment.ApplicationFolder

如果您使用注入(inject)传递值,那么您要么 a) 创建一个类来保存该值,要么 b) 传递一个字符串。后者不好,因为你的值(value)应该是不变的。前者是有效的,但似乎是一个公平的开销,因为只有一个有效值(如果确实需要,您仍然可以模拟/伪造该值以进行测试)。

我想你可以注入(inject)你的环境类,但对我来说这似乎有点矫枉过正。

关于c# - 在程序中的类之间共享值的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463995/

相关文章:

c# - C# 中类似 JavaScript 的动态属性

c# - C# 中 anchor html 标记的正则表达式?

c# - 对跟踪状态的类进行单元测试

flutter - 如何从有状态小部件类传递变量? - flutter

javascript - React-native:除非状态更改,否则绝对定位的组件不会完全渲染

c++ - 传递给共享库的模板函数 (c++)

c# - 刷新后在标签中显示文本

c# - 使用 REST 和 C# 实现 Google transliterate API,面临 unicode 和解析问题

android - Xamarin.Forms 应用需要写入共享的本地存储位置

android - delphi XE7 firemonkey android共享对象/库动态加载-模板