Zend framework2 如何让Zend Di将setter注入与RuntimeDefinition一起使用

Zend framework2 如何让Zend Di将setter注入与RuntimeDefinition一起使用,zend-framework2,Zend Framework2,我有一些setter类,我希望使用setter注入,但对于RuntimeDefinition它只是不触发。我最初认为这可能是不可能的,但后来我升级到Zend 2.1.0,并开始在我的Zend\Db\Adapter\Adapter中出现错误,该错误被注入到其他一些类中,因为引入了一个新的setProfiler()方法,并且它正试图对其进行setter注入(同时使用默认的运行时定义)。我查看了Adapter的代码,我发现该代码与我的代码之间的唯一区别是setProfiler()方法中有一些带有@pa

我有一些setter类,我希望使用setter注入,但对于RuntimeDefinition它只是不触发。我最初认为这可能是不可能的,但后来我升级到Zend 2.1.0,并开始在我的Zend\Db\Adapter\Adapter中出现错误,该错误被注入到其他一些类中,因为引入了一个新的setProfiler()方法,并且它正试图对其进行setter注入(同时使用默认的运行时定义)。我查看了Adapter的代码,我发现该代码与我的代码之间的唯一区别是setProfiler()方法中有一些带有@param的doc注释,所以我认为反射可能会使用它。我在代码中添加了一些,但它也不起作用。很明显我遗漏了什么。即使在编译到DI定义文件时,我也可以看到Zend\Db\Adapter\Adapter在其定义下有这样一个条目:

'methods' => 
array (
  '__construct' => true,
  'setProfiler' => true,
)
而我的定义是这样的:

'methods' => 
array (
  'setMyValue' => false,
)

我如何让Di正确识别我的setter函数,以便它们用于注入必要的值?

在深入研究了类的内部结构之后,我找到了答案

在Zend\Db\Adapter\Adapter的情况下调用setter的原因是
Profiler\ProfilerAwareInterface

如果您的类实现了一个接口,并且该接口中有一个setter,那么将调用setter。同样重要的是,实现的接口名称必须是


您可以在中看到此逻辑的一个示例。

在深入研究了该类的内部结构之后,我找到了它

在Zend\Db\Adapter\Adapter的情况下调用setter的原因是
Profiler\ProfilerAwareInterface

如果您的类实现了一个接口,并且该接口中有一个setter,那么将调用setter。同样重要的是,实现的接口名称必须是

您可以在中看到此逻辑的示例