首页 > 解决方案 > 在类中注入作为静态变量的依赖项

问题描述

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

public class Configuration
{
    public static Project currentProject;
}

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

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

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

标签: c#dependency-injectionstatic-classes

解决方案


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

话虽如此,我强烈建议您不要使用static手动依赖注入。如果您使用了 IoC 容器(例如 Autofac),那么可能会内置Func单例支持(不带)。static


推荐阅读