回答
将您的自定义类定义为服务,然后向其中注入依赖关系。
例:
// services.yml
services:
my.custom.service.id:
class: My\Custom\Class
arguments:
- @service.name
- @doctrine.orm.entity_manager
您的自定义类的构造函数,然后让这些服务作为参数。
请务必在官方文档中阅读服务容器。它详细讲述了所有这些。
OK,我想@Arms答案是一个可能的解决方案,我发现通过查看源Controller
,我可以扩展ContainerAware
你是正确的轨道上ContainerAware。
$this->get('id')
实际上是$this->container->get('id')
的快捷方式。而让容器到类是为实现ContainerAwareInterface
简单 - 把这个片段注入类:
public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null)
{
$this->container = $container;
}
对谁来说-1:我真的很喜欢解释你为什么认为我的答案是错的,什么是正确的答案。请记住,这个问题基本上是:“如何将服务容器注入到自定义类中?” – Inoryy 2011-12-24 19:41:37
我不是那个downvoted的人,但最初的问题是如何访问自定义类中的服务,而不是如何注入服务容器(这被认为是不好的做法)。 – 2011-12-24 20:27:03
他问如何访问服务中的自定义而不是如何向其中注入某种服务,他甚至从控制器中给出了一个例子,并且正在研究如何复制这种行为。仅仅因为它是一种情况糟糕的做法而降低一个完全正确的答案是非常错误的,因为我们没有给出一个完整的用例来决定。所以我真的希望这不是-1背后的原因。 – Inoryy 2011-12-24 23:10:31
如果你不知道你需要的那一刻创建服务时依赖的完整列表,你可以通过容器作为参数http://symfony.com/doc/current/book/service_container.html#using-the-expression-language
services:
service_name:
class: AppBundle\Class
arguments: ['@=container']
访问服务容器中的自定义类(不在服务定义的类)
这并不是做得最好的做法,但它的工作原理。如果您的自定义类未设置为一个服务,那么你可以使用全局变量$内核访问服务容器:
class Helper {
private $container;
/**
* Constructor assigns service container to private container.
*/
public function __construct() {
global $kernel;
$this->container = $kernel->getContainer();
}
function doSOmething() {
$someService = $this->container->get('service.name');
// do something with someService ...
}
}
- 1. 如何使用依赖于C#自定义提取类的webtest
- 2. 自定义MSBuild任务依赖关系
- 3. Maven自定义依赖类型
- 4. Angular2中的自定义Http服务。循环依赖错误
- 5. 如何定义两个依赖类?
- 6. 自定义依赖属性不获取绑定输入
- 7. 如何在安装服务时定义此依赖项
- 8. 如何在自定义类上实现依赖对象/属性?
- 9. 如何在自定义类中使用buildscript依赖关系?
- 10. 如何在自定义服务中获取Tempating或Container?
- 11. 如何获取Windows服务自定义状态? [C++/C#]
- 12. 自定义依赖属性绑定
- 13. 如何获取主类的Java类依赖项列表?
- 14. 如何定义库的依赖关系
- 15. WPF - 如何绑定到一个依赖属性自定义类的
- 16. Roslyn获取类的依赖关系
- 17. OSGi服务类依赖关系
- 18. 向pom.xml添加自定义jar(依赖项)依赖项
- 19. 使用MSDeploy API获取Web服务器的依赖关系
- 20. 如何在自定义CloudFormation资源中指定依赖关系?
- 21. 如何绑定到此自定义依赖项属性?
- 22. 自定义增量Gradle编译任务的依赖关系
- 23. 服务定位与依赖注入
- 24. 如何查看依赖于Python服务的Windows服务?
- 25. Yii2依赖自定义规则验证
- 26. 创建一个自定义依赖块
- 27. 自定义文件作为依赖
- 28. 自定义ViewResolver和依赖项注入
- 29. 自定义组件依赖性地狱
- 30. 获取选定的文本asp.net自定义服务器控件
请记住,如果你扩展'ContainerAware'您需要手动设置容器对象。如果你在没有访问容器的地方实例化你的自定义类,这是不可能的。 – 2011-12-24 05:06:43
注入整个容器是一个坏主意。明确地在服务中注入您需要的每项服务。 – 2011-12-24 17:31:28