Dependencies Ancesor对象中的ZF2依赖项注入
我的目标是使用setter在祖先对象中使用DI,因此我有一个用于祖先对象的公共DI。e、 g.我的其他模型继承的抽象模型类,预先配置了实体管理器等 到目前为止,在配置祖先并使用DI成功创建它之后,将其更改为抽象类,然后实例化该类的祖先,抽象的DI(无论是否设置为抽象)不会运行Dependencies Ancesor对象中的ZF2依赖项注入,dependencies,code-injection,zend-framework2,Dependencies,Code Injection,Zend Framework2,我的目标是使用setter在祖先对象中使用DI,因此我有一个用于祖先对象的公共DI。e、 g.我的其他模型继承的抽象模型类,预先配置了实体管理器等 到目前为止,在配置祖先并使用DI成功创建它之后,将其更改为抽象类,然后实例化该类的祖先,抽象的DI(无论是否设置为抽象)不会运行 名称空间Stuki use Doctrine\ORM\EntityManager; # abstract class Model { protected $em; public function se
名称空间Stuki
use Doctrine\ORM\EntityManager;
# abstract
class Model {
protected $em;
public function setEm(EntityManager $em) {
$this->em = $em;
}
}
这个类的DI
'di'=>数组(
上面的类和DI可以工作,但我希望它能在祖先对象上运行,所以
名称空间Stuki\Model
use Stuki\Model as StukiModel;
class Authentication extends StukiModel {
public function getIdentity() {
return 'ħ'; #die('get identity');
}
}
$auth = $e->getTarget()->getLocator()->get('Stuki\Model\Authentication');
最后一行,$auth=,不运行DI
如何在不使用内省的情况下为祖先对象设置DI?很抱歉,当我通过Meetup回复时,我的假设不正确;) 问题的关键在于您正在配置Stuki\Model以在InstanceManager中使用EntityManager,但要求Di进行Stuki\Authentication 您可以切换到构造函数注入…这是可行的,但我真的不喜欢在祖先类中定义构造函数:
class EntityManager {
}
# abstract
abstract class Model {
protected $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
}
class Authentication extends Model {
public function getIdentity() {
return 'ħ'; #die('get identity');
}
}
$di = new Zend\Di\Di();
$im = new Zend\Di\InstanceManager();
$di->setInstanceManager($im);
$auth = $di->get('Authentication');
var_dump($auth);
需要注意的是,在我们的两个示例中,Di仍然需要使用内省来发现诸如实例化器、方法和方法参数之类的东西。避免运行时自省的唯一方法是预编译:。从条令实体的角度来看,实体不应该是entitymanager感知的。我猜你是在用SpiffyDoctrineORM来支持zf2条令?
class EntityManager {
}
# abstract
abstract class Model {
protected $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
}
class Authentication extends Model {
public function getIdentity() {
return 'ħ'; #die('get identity');
}
}
$di = new Zend\Di\Di();
$im = new Zend\Di\InstanceManager();
$di->setInstanceManager($im);
$auth = $di->get('Authentication');
var_dump($auth);