Php 使用Zend 2依赖项注入(Zend\DI\DI)注入对象属性或方法

Php 使用Zend 2依赖项注入(Zend\DI\DI)注入对象属性或方法,php,dependency-injection,zend-framework2,Php,Dependency Injection,Zend Framework2,我目前正在使用一个类似于Pimple的类来管理依赖注入。例如,如果要检索依赖于配置类的数据库连接实例,我将执行以下操作: $DI = new DIContainer; $DI->Config = $DI->share = function($c){ return new Config; }; $DI->Database = $DI->share = function($c){ $cfg = $c

我目前正在使用一个类似于Pimple的类来管理依赖注入。例如,如果要检索依赖于配置类的数据库连接实例,我将执行以下操作:

$DI = new DIContainer;

$DI->Config =
     $DI->share = function($c){
           return new Config;
     };

$DI->Database =
     $DI->share = function($c){

          $cfg = $c->Config;

          $host = $cfg->getDbHost();
          $username = $cfg->getDbUsername();
          $password = $cfg->getDbPassword();
          $name = $cfg->getDbName();

          return new \mysqli($host, $username, $password, $name);
     };
最简单的说法是:$DI->Config始终返回配置类的相同实例,$DI->Database始终返回相同的数据库连接,方法不是注入Config对象本身,而是注入对象的几个属性(主机、用户等)

当然,这意味着必须在运行时设置容器,我正在考虑转移到Zend Framework 2的依赖项注入容器(它允许传递定义列表)


但是,我在Zend\Di\Di中找不到如何注入对象属性而不是对象本身的示例。这可能吗?你知道什么例子吗?

我对粉刺不太熟悉,也不完全确定你在问什么,但这里有一些基本信息

Zend Di充当一个代理,这意味着它维护对象实例的注册表,并始终返回所请求的每个对象的相同实例。因此,您应该能够轻松地让Zend Di始终返回相同的数据库连接(etc),而无需做任何花哨的事情,这是它的默认行为

在给出的示例中,对象属性/属性的注入不是您正在做的事情;相反,该示例看起来像“构造函数注入”:在构建
mysqli
对象时注入参数。Zend Di很好地支持构造函数注入

Zend Di的创建者拉尔夫·辛德勒(Ralph Schindler)对Zend Di有着全面的了解,在那里你应该能够找到你想做的大多数事情的参考资料

具体地说,您需要的可能是,它利用构造函数注入,包括配置参数

综上所述,许多ZF2开发人员更喜欢Zend ServiceManager而不是Zend Di。ServiceManager是ZF2的默认设置,它还充当服务定位器,如Zend Di,但它的用法更类似于Pimple。如果您正在从痘痘过渡,您可能会更加熟悉ServiceManager