Thanks @quasipickle for your answer, is helpful somewhat.
I came with a solution described in Phalcon docs, but with some tweaks to match my needs.
The solution I came with is to add new dispatch event listener to the servise container to handle the action depedencies, example:
$di->setShared('dispatcher', function() {
$evManager->attach("dispatch:beforeDispatch", function (Event $event, Dispatcher $dispatcher) {
try {
$methodReflection = new ReflectionMethod(
$dispatcher->getControllerClass(),
$dispatcher->getActiveMethod()
);
foreach ($methodReflection->getParameters() as $parameter) {
$parameterClass = $parameter->getClass();
if ($parameterClass instanceof ReflectionClass) {
$dispatcher->setParam($parameter->name, new $parameterClass->name);
}
}
} catch (Exception $exception) {
throw new \Exception('', Dispatcher::EXCEPTION_HANDLER_NOT_FOUND);
}
});
$dispatcher = new Dispatcher();
$dispatcher->setEventsManager($evManager);
return $dispatcher;
}
Even if it is not fully capable which laravel can do but it is doing the job as expected for now. Each framework has it's own mechanism, so if you need to make something special, you have to make it manually.