PHP和DIC中的依赖注入
我有一根骨头要挑依赖注入。似乎这样一个简单的概念已经导致了许多人的困惑,“正确”的方法似乎在复杂性方面失去了控制。为了让事情变得简单,我只想知道: 如果我使用标准函数来注册依赖项,这是否是一种良好的做法,如:PHP和DIC中的依赖注入,php,dependency-injection,Php,Dependency Injection,我有一根骨头要挑依赖注入。似乎这样一个简单的概念已经导致了许多人的困惑,“正确”的方法似乎在复杂性方面失去了控制。为了让事情变得简单,我只想知道: 如果我使用标准函数来注册依赖项,这是否是一种良好的做法,如: function someObject() { return new someObject(); } 我可以传递参数吗 function someObject($param1) { return new someObject($param1); } 最后,使用一个简单的自定义容
function someObject() {
return new someObject();
}
我可以传递参数吗
function someObject($param1) {
return new someObject($param1);
}
最后,使用一个简单的自定义容器类如何:
class Dependencies {
function someObject($param1) {
return new someObject($param1);
}
}
使用它:
class SomeClass {
public function __construct(Dependencies $dependencies) {
$this->dependencies = $dependencies
}
public function methodNeedsDependency() {
$param1 = 'one';
$task = $this->dependencies->someObject($param1);
}
}
我想我要问的是,这是一个非常简单的DIC实现的合理尝试吗?还是表面下有一些潜在的重大问题
谢谢 如果
SomeClass
是一个工厂,设计用于创建具有给定精确配置的实例,那么是的,我们可以说这是DIC的非常简单的实现
这里有什么问题?假设您想使用其他构造函数参数创建someObject
解决方案:
SomeClass
工厂。它的冗余解决方案还混合了两个应用程序层(配置层和对象创建层)someObject
的参数对methodneedsdependence
进行参数化。它允许您延迟代码配置的创建一般来说,这个讨论可以继续讨论关于体系结构的其他问题,比如“服务应该是无状态的”是什么使得不需要有多个服务,但您的问题的答案是这三点。当然要记住,这并不是DIC的终极答案。这只是我的看法;-) 如果
SomeClass
是一个工厂,设计用于创建具有给定精确配置的实例,那么是的,我们可以说这是DIC的非常简单的实现
这里有什么问题?假设您想使用其他构造函数参数创建someObject
解决方案:
SomeClass
工厂。它的冗余解决方案还混合了两个应用程序层(配置层和对象创建层)someObject
的参数对methodneedsdependence
进行参数化。它允许您延迟代码配置的创建一般来说,这个讨论可以继续讨论关于体系结构的其他问题,比如“服务应该是无状态的”是什么使得不需要有多个服务,但您的问题的答案是这三点。当然要记住,这并不是DIC的终极答案。这只是我的看法;-) 简单而彻底的回答。。。那么,当你说“创建一个实例,并提供一些精确的配置”时,你的意思是需要在容器级别提供配置吗?或者,按照第2步中提到的参数化是否合理,在后面的阶段将其作为参数传递?配置应该在…上给出,配置层:)创建配置文件(YAML、XML、TXT,无论什么),在这里您确切地说出要传递给实例的内容。Symfony容器的配置就是一个很好的例子。查看服务是如何定义的。简单而彻底的回答。。。那么,当你说“创建一个实例,并提供一些精确的配置”时,你的意思是需要在容器级别提供配置吗?或者,按照第2步中提到的参数化是否合理,在后面的阶段将其作为参数传递?配置应该在…上给出,配置层:)创建配置文件(YAML、XML、TXT,无论什么),在这里您确切地说出要传递给实例的内容。Symfony容器的配置就是一个很好的例子。查看服务是如何定义的。