2013-02-07 50 views
1

我有一些setter的類,我想使用setter注入,但使用RuntimeDefinition它只是沒有觸發。我最初認爲這可能是不可能的,但後來我升級到了Zend 2.1.0,並開始接受我的Zend \ Db \ Adapter \ Adapter錯誤,因爲引入了一個新的setProfiler()方法,它試圖對它進行setter注入(同時使用默認的RuntimeDefinition)。我查看了Adapter的代碼,我在代碼和我之間看到的唯一區別是setProfiler()方法在其中有@param的一些doc註釋,所以我想可能反射使用了這個。我添加了一些我的代碼,它也不起作用。顯然我錯過了一些東西。甚至當我編譯爲DI定義文件,我可以看到的Zend \ DB \適配器\適配器有這樣的定義下的條目:我如何讓Zend Di使用setter注入RuntimeDefinition

'methods' => 
array (
    '__construct' => true, 
    'setProfiler' => true, 
) 

而我的定義是這樣的:

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

如何讓Di正確識別我的setter函數,以便它們用於注入必要的值?

回答

1

在仔細研究了CompilerDefinition類的內部之後,我發現了它。

在Zend \ Db \ Adapter \ Adapter的情況下setter被調用的原因是因爲Profiler\ProfilerAwareInterface

看來,如果你的類實現了一個接口,並且在那個接口中有一個setter,那麼setter將被調用。實現的接口名稱是matches the regex /\w*Aware\w*/也是很重要的。

您可以在Ralphschindler's Zend\Di Examples中看到此邏輯的示例。