我想实现以下目标(不使用services.yml - 理想情况下,如果类型提示不能通过某种注释机制):
class MyClass {
private $msgService;
public function __construct(MessageServiceInterface $msgService) {
$this->msgService = $msgService;
}
public function sendMessage($text) {
$this->msgService->send($text);
}
}
基本上,我希望Symfony能够告诉MyClass需要注意依赖注入,并且需要注入MessageServiceInterface的实现。
我发现为每个需要使用的类定义服务非常耗时(特别是如果这些类只在该模块中使用,甚至可能只使用一次)。
答案 0 :(得分:1)
您可以使用JMSDiExtraBundle简化服务定义和使用。该捆绑包为Symfony2提供高级依赖注入功能。特别是Annotation功能,您可以执行以下操作:
将课程标记为服务:
<?php
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service("some.service.id", parent="another.service.id", public=false)
*/
class Listener
{
}
这标记了注射方法的参数:
<?php
use JMS\DiExtraBundle\Annotation\Inject;
use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service
*/
class Listener
{
/**
* @InjectParams({
* "em" = @Inject("doctrine.entity_manager")
* })
*/
public function __construct(EntityManager $em, Session $session)
{
// ...
}
}
所有没有任何额外配置文件。
希望这个帮助