依赖注入和初始化对象

时间:2014-01-26 20:05:19

标签: php dependency-injection

我是一个体面的OOP和DI的新手,因此想知道,如果以下示例及其包含依赖对象的我的引导类的初始化模式真的可以使用,例如:

new Session(
   new Config, 
   new Database ( 
       new Config 
   ), 
   new Page ( 
       new Config 
   ), 
   new Statistics ( 
      new Database ( 
         new Config 
      ) 
   ), 
   new Notification, 
   new Filter
);

我相信,熟悉DI的人可以在bootstrap对象中说出上面的代码吗?

看起来有点笨重,但这样好吗?是这样,我们可以称之为好/正确/可接受

1 个答案:

答案 0 :(得分:1)

经过一段时间的学习调查新问题后,我终于得出结论,就我而言,最好的依赖注入容器将是:

Dice - minimalist Dependency Injection Container for PHP.

它只有一个文件,为了获得代码,我的问题初始化,您只需要:

(new Dice)->create('Session');

骰子 DIC会处理剩下的事情。您可以在Tom Butler(开发人员)主页上阅读有关 Dice 的更多信息。

我个人认为这是注入依赖项的最佳(最简单和最简单)方式,默认情况下应该在PHP中内置,我真的想知道它为什么不是?


为了将代码与特定的依赖注入容器分离,我最好建议使用自定义类包装器:

class DIC extends Dice
  {
    function __construct( $component, array $args = array(), $callback = null, $forceNewInstance = false )
      {
          return parent::create( $component, $args, $callback = null, $forceNewInstance = false );
      }
  }

这也将有助于缩短更多的初始化过程,实现令人难以置信的令人难以置信的惊人效果。

现在,为了实例化复杂的DI集,例如:

new Session( new Config, new Database ( new Config ), new Page ( new Config ), new Statistics ( new Database ( new Config ) ), new Notification, new Filter );

您所要做的就是:

new DIC('Session');

如果您想将参数传递给构造函数,可以使用:

new DIC('Session', array($param));

我不知道别人的想法,但我发现这个惊人的(至少到目前为止,我今天所处的位置)。

请你好好评论一下可能存在的缺点,我将来可能会使用这种DIC(骰子)或这种方法来面对这个问题!