c# - 在类中注入作为静态变量的依赖项
问题描述
WinForms 应用程序使用以下“配置类”(部分代码):
public class Configuration
{
public static Project currentProject;
}
应用程序中的许多其他类当前使用此Project
变量,例如:
public class Controller
{
public void processSomething()
{
Configuration.currentProject.doSomething();
}
}
出于松耦合的目的,我希望能够注入一个Project
变量作为依赖项。问题是,该Configuration.currentProject
值可能会在运行时发生变化。应该如何处理?通过引用传递它可以解决它吗?
解决方案
我建议传入 a Func<IProject>
or Func<Project>
。这将允许您很好地处理更改Configuration.currentProject
(因为调用该函数将始终看到 的当前值static
)并且还允许相对容易地编写单元测试。
话虽如此,我强烈建议您不要使用static
手动依赖注入。如果您使用了 IoC 容器(例如 Autofac),那么可能会内置Func
单例支持(不带)。static
推荐阅读
- linux - 解压缩函数在 Bash 脚本中显示奇怪的输出
- javascript - 无法关闭硒中的上传文件窗口
- python - 如何在熊猫数据框中按不同范围对一列值求和
- r - 在 R 4.0.3 for MAC 中加载 SDSFoundations 包时出错
- r - 为什么 lpSolveAPI 求解器在第二次运行时变慢?
- vb6 - AfterColEdit () 事件 - Visual Basic 6 和 Apex True DBGrid Pro 6
- javascript - 禁用js时没有脚本标签
- c++ - 如何将运算符 >> 重载为向量
- javascript - TypeError:尽管遵循所有 SO 答案,但无法读取 null 的属性“appendChild”
- sql - 优先考虑子搜索,在合理的时间内返回结果