[英]Symfony2. Force a service to get instanced
我正在使用symfony 2.8,我面临的情况是,即使某个地方没有请求服务,也必须实例化服务。
为什么? 因为此Core服务配置通过调用Core的方法传输的标记服务(我在编译器传递中执行此操作)。 然后,如果我在没有请求Core的情况下请求其中一个标记服务,它将不会被配置然后无法使用。
这是编译器传递:
$coreDefinition = $container->findDefinition(
'app.improvements.core'
);
$taggedAppliers = $container->findTaggedServiceIds('app.improvement.applier');
foreach ($taggedAppliers as $id => $tags) {
$coreDefinition->addMethodCall(
'registerApplier',
[new Reference($id)]
);
}
$taggedImprovements = $container->findTaggedServiceIds(
'app.improvement'
);
// Only method found to initialize improvements.
foreach ($taggedImprovements as $id => $tags) {
$coreDefinition->addMethodCall(
'registerImprovement',
[new Reference($id)]
);
}
总而言之,Appliers注册了改进和核心寄存器Appliers。 核心员工与应用程序的改进,因为每个改进必须在核心存储的特定应用程序中注册。
问题是,当我只请求Applier时,它的改进没有注册到它,因为核心没有实例化。
谢谢。
抛开设计问题,实例化服务的最简单方法是使用事件监听器 。 在您的情况下,您将侦听kernel.request
并从容器中提取服务。
class RequestListener
{
public function onKernelRequest(GetResponseEvent $event)
{
$event->getKernel()->getContainer()->get('service_id');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.