我看到的所有 DI 的例子中,它们依赖的对象都是其他类,比如服务。但实际上,一个对象可能会严重或者关键地依赖配置值,比如字符串和资源包装器(文件/路径/URI/URL),而不是整个大字符串/文档或者 reader。
需要注意的是,这里只讨论 DI 在 Java 或者 C# 语法中的设计模式,而不是任何特定的 DI 框架如何处理此问题。
例如,假设我有这样的一个类,它返回一个字符串(相对路径,基于某些晦涩的实现逻辑)。它(以及它的各种实现)对于“项目位置”具有配置/初始化依赖项,因为用户可能在他们的机器上有各种项目,并且每当调用此类时,它将根据给定的项目执行一些逻辑。
需要注意的是,这里只讨论 DI 在 Java 或者 C# 语法中的设计模式,而不是任何特定的 DI 框架如何处理此问题。
例如,假设我有这样的一个类,它返回一个字符串(相对路径,基于某些晦涩的实现逻辑)。它(以及它的各种实现)对于“项目位置”具有配置/初始化依赖项,因为用户可能在他们的机器上有各种项目,并且每当调用此类时,它将根据给定的项目执行一些逻辑。
public abstract class PathResolver {
protected File projectFilesLocation;
public RoutinePathResolver(File projectFilesLocation) {
this.projectFilesLocation = projectFilesLocation;
}
public abstract String getPath(String someValue);
}
我并不是只为了单元测试才使用DI(天哪,我甚至没有做单元测试,这个项目已经存在)我只是想要将我的依赖项/创建关注点和逻辑关注点分离。
FileProvider
接口,例如有CMSFileProvider
和LocalSystemFileProvider
两种实现方式。 - JamesPathResolvedConfig
)只携带了特定类(或接口)的配置数据,那么这是完全可以的。但如果一个ApplicationConfig
VO 只使用了其中一部分数据,那就绝对不行。 - Creynders