gpt4 book ai didi

symfony - 如何在 Symfony 中注入(inject)类而不是服务?

转载 作者:行者123 更新时间:2023-12-02 23:09:41 28 4
gpt4 key购买 nike

我想实现以下目标(不使用 services.yml - 理想情况下,如果类型提示无法做到这一点,则通过某种注释机制):

class MyClass {
private $msgService;

public function __construct(MessageServiceInterface $msgService) {
$this->msgService = $msgService;
}

public function sendMessage($text) {
$this->msgService->send($text);
}
}

基本上,我希望 Symfony 能够告诉 MyClass 需要了解依赖项注入(inject),并且需要注入(inject) MessageServiceInterface 的实现。

我发现为我需要使用的每个类定义一个服务非常耗时(特别是如果这些类仅在该模块中使用,甚至可能只使用一次)。

最佳答案

您可以使用JMSDiExtraBundle来简化服务定义和使用。 。该 bundle 为 Symfony2 提供高级依赖注入(inject)功能。尤其是Annotation您可以执行以下操作的功能:

将类标记为服务:

<?php

use JMS\DiExtraBundle\Annotation\Service;

/**
* @Service("some.service.id", parent="another.service.id", public=false)
*/
class Listener
{
}

这标记了注入(inject)方法的参数:

<?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)
{
// ...
}
}

全部无需任何额外的配置文件。

希望这有帮助

关于symfony - 如何在 Symfony 中注入(inject)类而不是服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com