配置类别名以与Zend \ Di \ Di一起使用

时间:2012-12-17 20:45:15

标签: dependency-injection zend-framework2

我有一个记录器类(Application \ Debug \ Logger),用于将各种调试消息从整个应用程序记录到日志文件中。 我想使用简单的别名'logger'获取该类的实例。 所以我尝试配置Zend \ Di \ Di,以便我可以在例如模块控制器或其他应用程序组件中执行类似的操作:

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

为实现这一点,我在Application / config / module.config.php中有这个:

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

但问题是:别名'logger'不起作用。我可以使用Di并按名称(Application \ Debug \ Logger)获取类,但不能使用别名(我得到错误:类记录器无法在提供的定义中找到)。我想我必须以某种方式将配置传递给Di,但我不知道如何。你能救我吗?

1 个答案:

答案 0 :(得分:0)

我找到了问题的部分解决方案。我注意到当我调用ServiceManager时,它还使用Dependency Injection配置来查找正确的类,所以我可以调用:

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

在控制器中通过为DI配置的别名来获取记录器实例。

所以在我的配置文件中我也可以输入:

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

,它与之前的di config示例相同。 但我仍然不完全明白如何正确使用DI,所以如果有人能向我解释,我将不胜感激。