Ich arbeite mit Symfony 2.8, ich stehe vor einer Situation, in der ein Dienst instanziiert werden muss, auch wenn er nicht irgendwo angefordert wird.Symfony2. Erzwinge einen Dienst, um instanziert zu werden
Warum? Weil dieser Core-Dienst getaggte Dienste konfiguriert, die durch einen Methodenaufruf in Core übertragen werden (ich habe dies in einem Compiler-Durchlauf getan). Und wenn ich dann einen dieser getaggten Dienste ohne Request Core anfordere, wird es nicht konfiguriert und dann unbrauchbar. Hier
ist der Compiler Pass:
$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)]
);
}
Um es zusammenzufassen, die Applikatoren Register Verbesserung und Core-Register Applikatoren. Die Kernzuordnung verbindet Verbesserungen mit Anwen- dern, da jede Verbesserung in einem bestimmten Anwen- der registriert werden muss, den der Kern speichert.
Das Problem, dass, wenn ich nur einen Applier anfordern, seine Verbesserungen nicht darin registriert werden, weil der Kern nicht instancied ist.
Vielen Dank.
Kann der Dienst in einen Singleton umgewandelt werden? Wenn dies der Fall ist, können Sie es über ein Kernel-Ereignis instanziieren und es so konfigurieren, dass es später von anderen Objekten aufgerufen wird. –