领域层中的 IoC
IoC in Domain Layer
在我的域层中,我有合同 Hashing
。我的一项域服务取决于此合同。目前我已经将它注入到 __construct 方法中。
在基础设施层我有这个合同的实施。我写了一些看起来像 IoC 容器的东西,它通过自动注入注入创建服务。
一切正常。但我知道服务的依赖性会增长。我将向它们添加更多 UseCases。还有另一个问题——容器注入所有依赖项,但我们只能使用一个 UseCase,所以它会做多余的工作。
可以吗,如果我将注入 IoC 容器本身而不是许多参数,并在 UseCases.
中使用它
IoC 合约也位于领域层合约命名空间
Is it ok, if I will inject IoC container itself instead of many parameters
不,这样不行。在 Composition Root with access to an unbounded set of dependencies is considered an anti-pattern. This anti-pattern is called Service Locator.
之外提供任何 class
注入容器会导致 class 依赖于冗余组件(容器)并使 class 的依赖关系变得不明显。这使测试变得复杂,并使 class 对其复杂程度不诚实。
您可能想注入容器以防止 class 的构造函数不断变化,但这是另一个问题的迹象。 类 不断获得新的依赖项可能违反了 Single Responsibility Principle. You will end up with classes with many constructor arguments—a code smell called Constructor over-injection.
在我的域层中,我有合同 Hashing
。我的一项域服务取决于此合同。目前我已经将它注入到 __construct 方法中。
在基础设施层我有这个合同的实施。我写了一些看起来像 IoC 容器的东西,它通过自动注入注入创建服务。
一切正常。但我知道服务的依赖性会增长。我将向它们添加更多 UseCases。还有另一个问题——容器注入所有依赖项,但我们只能使用一个 UseCase,所以它会做多余的工作。
可以吗,如果我将注入 IoC 容器本身而不是许多参数,并在 UseCases.
中使用它IoC 合约也位于领域层合约命名空间
Is it ok, if I will inject IoC container itself instead of many parameters
不,这样不行。在 Composition Root with access to an unbounded set of dependencies is considered an anti-pattern. This anti-pattern is called Service Locator.
之外提供任何 class注入容器会导致 class 依赖于冗余组件(容器)并使 class 的依赖关系变得不明显。这使测试变得复杂,并使 class 对其复杂程度不诚实。
您可能想注入容器以防止 class 的构造函数不断变化,但这是另一个问题的迹象。 类 不断获得新的依赖项可能违反了 Single Responsibility Principle. You will end up with classes with many constructor arguments—a code smell called Constructor over-injection.