在 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
)。
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
)。