Dependency injection 配置用于Zend\Di\Di的类别名
我有一个logger类(Application\Debug\logger),用于将整个应用程序中的各种调试消息记录到日志文件中。 我想使用简单的别名“logger”获取该类的实例。 因此,我尝试配置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...
$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,所以如果有人能给我解释一下,我将不胜感激