Symfony resuelve manualmente las dependencias.
Utilizo un patrón de despachador de comandos.
Tengo un resolutor que empareja un comando dado con su controlador correspondiente, de la siguiente manera:
php
class HandlerResolver
{
public function resolve(CommandInterface $command): AbstractHandler
{
$handlerClass = preg_replace(‘/Command/’, ‘Handler’, $command::class);
return new $handlerClass();
}
}
Quiero que algunos de mis controladores tengan servicios en su constructor, por ejemplo:
abstract class AbstractHandler
{
public function handle(CommandInterface $command): CommandResponse
{
$action = $command->getAction();
$args = $command->getArgs();
$response = call_user_func_array([$this, $action], $args);
return (new CommandResponse())->wrap($response);
}
}
class NotifierHandler extends AbstractHandler
{
public function __construct(
private SomeService $service,
) {
}
protected function notify()
{
// use my private service
}
}
¿Cómo puedo usar las herramientas de Symfony para detectar e inyectar algunos servicios declarados en mi nuevo $handlerClass(), por supuesto, para que sea más sencillo, todos mis controladores concretos no tienen los mismos servicios como dependencias…
¡Espero que sea claro!
¡Gracias por su tiempo!
davy.ai
Puede utilizar el componente de Inyección de Dependencias de Symfony (Dependency Injection Component) para inyectar servicios en sus controladores.
Puede crear una definición de servicio para cada controlador y especificar los servicios que requiere. Luego, puede usar el método
resolve()
para obtener una instancia del controlador y el componente de Inyección de Dependencias inyectará los servicios necesarios en el controlador.Por ejemplo: