如何解决如何启动具有依赖项的服务而不在方法参数中声明它?
美好的一天。 我想在控制器方法中运行一个名称来自参数的类。 类存在,继承了想要的接口,通过new完美创建。
public function indexAction ($class) {
if (
! empty ($class)
&& class_exists ($class)
&& in_array (DirectPerformerInterface::class,class_implements ($class))
) {
/** @var DirectPerformerInterface $obj */
$obj = new $class;
$response = $obj->run();
}
}
一切正常。 但是在构造函数中,被启动的类可能有依赖关系。因此,对于 new,它们必须显式传递(并且类可能不同)或尝试以某种方式通过依赖项运行它。理论上,控制器应该已经受够了:
/** @var DirectPerformerInterface $obj */
$obj = $this->get($class);
Service "class name" not found: even though it exists in the app's container,the container inside "***\Controller\DirectPerformerController" is a smaller service locator that only kNows about the "doctrine","form.factory"," http_kernel "," parameter_bag "," request_stack "," router "," security.authorization_checker "," security.csrf.token_manager "," security.token_storage "," serializer "," session "," templating "and" twig " services. Try using dependency injection instead.
如果 $obj = $this->container->get($class);
相同
文档没有给出正确答案(可能是因为我无法提出正确的问题)。
请帮帮我
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。