我在用
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/