php - ZF2 依赖注入(inject)别名和多个实例

标签 php dependency-injection zend-framework2

我们目前正在 Zend Framework 2 中编写一个模块。

我很难找到关于此的文档,但我知道这是可能的。

我在层次结构中有 3 个类,我想通过依赖注入(inject)来设置它们。我们称这些类为; A 类、B 类和 C 类。

ClassA 包含一个 ClassB 实例数组,ClassB 包含一个 ClassC 实例数组。 ClassB 的每个实例都应使用不同的参数进行实例化。这同样适用于ClassC。所有 3 个类的参数都通过构造函数传入(如果需要,也可以使用 setter 处理。)。

<?php
class ClassA {
    protected $arrClassBInstances = array();

    public function __construct( $arrClassBInstances ) {
         $this->arrClassBInstances = $arrClassBInstances;
    }
}

class ClassB {
    protected $arrClassCInstances = array();
    protected $someOtherParam = "";

    public function __construct( $arrClassCInstances, $someOtherParam ) {
         $this->arrClassBInstances = $arrClassCInstances;
         $this->someOtherParam = $someOtherParam;

    }
}

class ClassC {
    protected $someParam = "";

    public function __construct( $someParam ) {
         $this->someParam = $someParam;
    }
}

所以它们是我的问题的两个部分。首先,如何配置注入(inject)不同参数的同一类的多个实例?例如,多个 ClassB 实例,每个实例都有自己的 ClassC 实例子集。 ZF2 DiC 中必须有某种别名。

其次,我如何将一组重新配置依赖项注入(inject)到一个类中。例如,如何将 ClassB 实例数组注入(inject) ClassA?

如果可能,请给我提供一个直接使用 DiC 的示例,以及在 module.config.php 的 DI 部分中实现此目的的示例。

最佳答案

来自documentation ,我认为这应该有效:

// $event instance of \Zend\Mvc\MvcEvent
$di = $event->getTarget()->getLocator();
$paramsForA = array(
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>1)),
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>2)),
    ))),
    $di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>3)),
        $di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>4)),
    ))),
);
$classA = $di->get('qualified_namespaces_or_di_alias_for_a', array('arrClassBInstances'=>$paramsForA));

您可以使用DI 别名完全限定 namespace 作为$di->get() 的第一个参数

关于php - ZF2 依赖注入(inject)别名和多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10173171/

相关文章:

php - 如何解释 Zend Framework 2 错误?

javascript - jquery/ajax 向服务器发出请求并显示所选记录

PHP/Google OAuth - 获取 MAIN gmail 电子邮件而不是@pages.plusgoogle 电子邮件

javascript - PHP 使用 javascript (codeigniter) 以动态形式进入数据库

c# - 具有多个存储库的依赖注入(inject)

module - ZF2 : Get module name (or route) in the application layout for menu highlight

javascript - 将 PHP 字符串变量传递给 Javascript 函数

asp.net-mvc-3 - 设置默认依赖项而不使用第三方依赖项解析器

c# - 使用带有 XML 配置的 Autofac

php - doctrine 2 和 zend framework 2 如何使用缓存?