Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2依赖注入别名和多个实例_Php_Dependency Injection_Zend Framework2 - Fatal编程技术网

Php ZF2依赖注入别名和多个实例

Php ZF2依赖注入别名和多个实例,php,dependency-injection,zend-framework2,Php,Dependency Injection,Zend Framework2,我们目前正在Zend Framework 2中编写一个模块 我很难找到这方面的文档,但我知道这是可能的 我有3个层次结构中的类,我想通过依赖注入来设置它们。让我们称之为这些类;A类、B类和C类 ClassA包含一个ClassB实例数组,ClassB包含一个ClassC实例数组。ClassB的每个实例都应该使用不同的参数进行实例化。这同样适用于C类。所有3个类的参数都通过构造函数传入(如果需要,也可以使用setter处理) 从中,我认为这应该是可行的: // $event instance of

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

我很难找到这方面的文档,但我知道这是可能的

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

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

从中,我认为这应该是可行的:

// $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 alias
full-qualified namespace
作为
$DI->get()

的第一个参数,下面是两个如何使用DI配置文件的示例。见:


我刚刚写了一篇关于这个主题的文章。我个人并不使用Di类,或者DiC,但希望您能发现这些概念可以直接应用于您的问题,特别是在第2部分中,无论您选择使用什么作为IoCC。

// $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));