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