我正在使用Zend Framework 1和Pimple依赖注入器。在YouTube上观看了一些Google Guice演示文稿后,我不确定我是否真的使用DI而不是简单的工厂。我正在使用我的Pimple注入器的方法是让它根据注册并与对象关联的字符串键给我一个对象的实例:
class SomeService extends AbstactService {
/** @var Pimple $injector Inherited from base class */
protected $injector;
public function save(array $data) {
$model = $this->injector["some-model"];
if (empty($data["id"])) {
$model->insert($data);
} else {
$model->update($data);
}
}
}
成员变量$ injector在bootstrap中创建并配置,并发送到我的AbstractService类,因此所有具体服务都继承它。
顺便说一下,在这里使用$ injector,即使它使用了Pimple(一个DI容器),这是实现DI模式还是别的(工厂或服务定位器)?
更新
更多信息:我正在使用Zend Framework(MVC)构建营养/锻炼网站。
我认为令我困惑的是如何在方法中创建一些对象,其中该对象仅用于该方法,并且该方法需要一些运行时参数。例如,SomeService类由我的控制器中的容器实例化。然后我调用SomeService :: save()传入$ data。 $ model的创建地点和方式如何?假设$ model仅用于该特定方法,因此将它作为类成员是没有意义的,如何由容器注入?