【发布时间】:2015-11-07 14:35:42
【问题描述】:
是否可以像 C# 或 Java 等其他编程语言一样将依赖项注入到 ES2015 模块中?如果我导入一个模块,我会创建一个对它的硬依赖,并且以后不能在运行时更改它。例如,我有以下 JavaScript 代码:
import Animal from './dog';
class Person {
feedAnimal() {
new Animal().feed();
}
}
我正在导入 dog 模块。但是如果我想把它变成一只猫呢?目前我必须手动修改第 1 行,但在某些情况下,我希望它可以从外部进行配置,以便在某些情况下应该有一只猫,而在其他一些情况下它应该是一只猫。所有这些都可以通过经典的依赖注入来完成。
我知道有一些 DI 框架,例如 Scatter、Electrolyte、Wire 等等,但不幸的是,它们中的大多数都需要一些特殊的语法,并且不是为 @987654324 设计的@。
【问题讨论】:
-
您希望依赖注入如何工作?你可以使用
class Person { constructor(Animal) { this.Animal = Animal; } feedAnimal() { new this.Animal().feed() } },但听起来你期待更高级的东西。 -
我不确定
require-inject是否支持,但你可能想看看。 -
@lyschoening 谢谢,但我想更改内部模块依赖项,就像编写单元测试一样。
-
@thefourtheye 谢谢你,但我确实不需要需要任何东西。请求是与 CommonJS 相关的事情。我使用闪亮的新 ES2015 导入功能。
-
您可能会以一种或另一种方式劫持模块加载器。我不建议这样做。
标签: javascript dependency-injection ecmascript-6 es6-module-loader