PHP - 在多个层中注入相同的实例(服务)

时间:2016-08-18 16:15:24

标签: php service dependency-injection

我需要在我的程序的大部分时间内访问某些实例(像事件调度程序这样的服务......)。

我的所有类都扩展了一个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
             ...

当我有一个类在另一个类中注入一个依赖项时,它会变得混乱,这个类本身会在另一个类中注入这个依赖项。

我还应该使用这个系统吗?它允许简单的测试并且易于使用,但是当我必须在多个实例层中注入相同的依赖项时,它变得很难管理。

我应该使用基于容器的服务定位器吗?或者我应该完全做其他事情?提前谢谢。

0 个答案:

没有答案