2012-12-17 85 views
1

我有一個記錄器類(Application \ Debug \ Logger),用於記錄從整個應用程序到日誌文件的各種調試消息。 我想使用簡單的別名'記錄器'來獲得該類的實例。 所以我嘗試配置的Zend \迪\迪,這樣我就可以在做這樣的事情,例如,模塊控制器或其他應用程序組件:配置用於Zend Di Di的類別別名

$di = new \Zend\Di\Di(); 
$logger = $di->get('logger'); 
//$logger should be Application\Debug\Logger instance... 

要做到這一點,我有這樣的應用程序/配置/module.config.php:

'di' => array(
    'instance' => array(
     'alias' => array(
      'logger' => 'Application\Debug\Logger', 
     ), 
    ), 
) 

但問題是:別名'記錄器'不起作用。我可以使用Di並通過全名(Application \ Debug \ Logger)獲取類,但不能通過別名(我得到錯誤:類記錄器無法位於提供的定義中)。我想我必須以某種方式將配置傳遞給Di,但我不知道如何。你可以幫我嗎?

回答

0

我發現我的問題的部分解決方案。我注意到,當我打電話的ServiceManager,它也使用依賴注入配置,以找到合適的課,所以我可以打電話:

$logger = $this->getServiceLocator()->get('logger'); 

在控制器通過配置爲DI別名得到的記錄器實例。

所以在我的配置文件我也可以把:

'service_manager' => array(
    'invokables' => array(
     'logger' => 'Application\Debug\Logger', 
    ) 
), 

和它的工作原理相同,前面的雙配置的例子。 但我還是不完全瞭解如何正確使用DI,所以如果有人能向我解釋,我將不勝感激。