Dependency injection 配置用于Zend\Di\Di的类别名

Dependency injection 配置用于Zend\Di\Di的类别名,dependency-injection,zend-framework2,Dependency Injection,Zend Framework2,我有一个logger类(Application\Debug\logger),用于将整个应用程序中的各种调试消息记录到日志文件中。 我想使用简单的别名“logger”获取该类的实例。 因此,我尝试配置Zend\Di\Di,以便在模块控制器或其他应用程序组件中执行类似操作: $di = new \Zend\Di\Di(); $logger = $di->get('logger'); //$logger should be Application\Debug\Logger instance...

我有一个logger类(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,但我不知道如何传递。你能帮我吗?

我找到了问题的部分解决办法。我注意到,当我调用ServiceManager时,它还使用依赖项注入配置来查找合适的类,因此我可以调用:

$logger = $this->getServiceLocator()->get('logger');
在控制器中,通过为DI配置的别名获取记录器实例

因此,在我的配置文件中,我还可以:

'service_manager' => array(
    'invokables' => array(
        'logger' => 'Application\Debug\Logger',
    )
), 
它的工作原理与前面的di配置示例相同。 但我仍然不完全理解如何正确使用DI,所以如果有人能给我解释一下,我将不胜感激