我需要在我的程序的大部分时间内访问某些实例(像事件调度程序这样的服务......)。
我的所有类都扩展了一个Container类,允许使用魔术方法__set
和__get
轻松依赖注入:
class Container {
private $_map = array();
public function __get($name) {
return $this->_map[$name];
}
public function __set($name, $value) {
$this->_map[$name] = $value;
}
}
class Dependent extends Container {
public function doStuff() {
$this->dependency->doThing('some text');
}
}
class Dependency {
public function doThing($txt) {
echo $txt;
}
}
$dependent = new Dependent;
$dependent->dependency = new Dependency; // Injecting dependency
$denpendent->doStuff(); // Prints out "some text"
所以在我的系统(MVC应用程序)中,我有一个前端控制器,它实例化我所有类中需要的所有服务,然后将它们注入其他类中,依此类推:
FrontController
injects services to: Controller
injects services to: View and Model
...
当我有一个类在另一个类中注入一个依赖项时,它会变得混乱,这个类本身会在另一个类中注入这个依赖项。
我还应该使用这个系统吗?它允许简单的测试并且易于使用,但是当我必须在多个实例层中注入相同的依赖项时,它变得很难管理。
我应该使用基于容器的服务定位器吗?或者我应该完全做其他事情?提前谢谢。