我有目前的情况:
A有一个抽象类Controller
,它具有依赖关系,这些依赖关系由服务定位器Locator
在运行时注入。服务定位器已正确实现 - 它不会在整个应用程序中传递,只能由Controller
使用,这是应用程序的根对象。
我遇到的问题是当我从Controller
继承时如何构造服务定位器 - 我不一定希望(并且不希望)扩展基本服务定位器{{1但是我需要复制父类的依赖关系。
以下是一些示例代码,用于解释正在发生的事情:
Locator
-
// Controller.php
namespace abstract;
abstract class Controller {
public function __construct( $locator ) {
$this->template_handler = $locator->getTemplateHandler();
$this->input_sanitizer = $locator->getInputSanitizer();
}
}
-
// Controller.php
class Controller extends abstract\Controller {
public function __construct( $locator ) {
$this->data_factory = $locator->getDataFactory();
parent::__construct( $locator );
}
}
所以我想问题就变成了 - 如何定义我的// Locator.php
namespace abstract;
class Locator {
public function getTemplateHandler() {
return 1234;
}
public function getInputSanitizer() {
return 1234;
}
}
类?我是否扩展Locator
(创建一个并行继承树),我是否实现了相同的方法而不扩展abstract\Locator
(这个重复的代码),或者我做了一些我没想过的不同的东西?< / p>
答案 0 :(得分:0)
您应该在所有控制器中使用一个定位器。当然,除非服务非常具体。否则,如果必须首先找到所需的定位器,那么服务定位器的目的是什么?