在 class 中注入作为静态变量的依赖项

Injecting a dependency that is a static variable in a class

WinForms 应用程序使用以下“配置 class”(部分代码):

public class Configuration
{
    public static Project currentProject;
}

应用程序中的许多其他 classes 当前使用此 Project 变量,例如:

public class Controller
{
    public void processSomething()
    {
        Configuration.currentProject.doSomething();
    }
}

出于松散耦合的目的,我希望能够注入一个 Project 变量作为依赖项。问题是,Configuration.currentProject 值可能会在运行时发生变化。这应该如何处理?传引用能解决吗?

我建议传入 Func<IProject>Func<Project>。这将使您能够很好地处理对 Configuration.currentProject 的更改(因为调用该函数将始终看到 static 的当前值)并且还允许相对容易地编写单元测试。

也就是说,我强烈建议您不要使用 static 和手动依赖项注入。如果您使用 IoC 容器(例如 Autofac),那么可能会内置 Func 和单例支持(没有 static)。