Php 在Symfony中默认机制之外的机制中启用依赖项注入

Php 在Symfony中默认机制之外的机制中启用依赖项注入,php,symfony,dependency-injection,Php,Symfony,Dependency Injection,我的Symfony应用程序中有一种机制,需要基于默认服务容器启用依赖项注入。我在HttpKernel中找到了该代码,其中依赖项注入通过控制器机制进行管理 但是,我不确定如何实例化用于此目的的ArgumentResolver 以下是我迄今为止所做的尝试: 类数据源控制器 { 公共函数queryDatasource(字符串$hash、请求$Request、ArgumentResolverInterface$参数\u解析器) { //构造$datasource变量的逻辑 $arguments=$arg

我的Symfony应用程序中有一种机制,需要基于默认服务容器启用依赖项注入。我在
HttpKernel
中找到了该代码,其中依赖项注入通过控制器机制进行管理

但是,我不确定如何实例化用于此目的的
ArgumentResolver

以下是我迄今为止所做的尝试:

类数据源控制器
{
公共函数queryDatasource(字符串$hash、请求$Request、ArgumentResolverInterface$参数\u解析器)
{
//构造$datasource变量的逻辑
$arguments=$argument\u解析器->getArguments($request,[$datasource,'query']);
$data=$datasource->query(…$arguments);
返回新的JsonResponse($data);
}
}

但是,
ArgumentResolverInterface
似乎无法自动连接,我不确定应该如何处理此问题。那么,我如何实例化
ArgumentResolverInterface
的子类,或者应该使用什么其他机制在我的应用程序的任意组件中实现依赖项注入呢?

在进一步研究和扫描Symfony的源代码之后,我找到了一个适合我需要的解决方案:我手动创建了
ArgumentResolver
的一个实例并使用它

注意我的用例需要解析一个不是服务的对象,因此依赖注入机制无法像任何其他服务一样解析它。我在回答中包括了这一点,因为这可能对其他人有用:

$resolvers=[];
数组推送($resolvers,…ArgumentResolver::GetDefaultArgumentValueResolver());
数组\u push($resolvers,新类实现ArgumentValueResolverInterface{
//实现接口以解析具有特定类型/名称的参数
});
$argument_resolver=新ArgumentResolver(新ArgumentMetadataFactory(),$resolvers);
//要使用它:
$arguments=$argument\u解析器->getArguments($request,[$datasource,'query']);
$datasource->query(…$arguments);
我希望这对其他人有用



我不能证明这是一个解决方案,或是最好的解决方案,但它似乎对我的用例有效。我欢迎其他人评论/回答,以便我们可以一起改进解决方案

在进一步研究和扫描Symfony的源代码之后,我能够找到一个适合我需要的解决方案:我手动创建一个
ArgumentResolver
的实例并使用它

注意我的用例需要解析一个不是服务的对象,因此依赖注入机制无法像任何其他服务一样解析它。我在回答中包括了这一点,因为这可能对其他人有用:

$resolvers=[];
数组推送($resolvers,…ArgumentResolver::GetDefaultArgumentValueResolver());
数组\u push($resolvers,新类实现ArgumentValueResolverInterface{
//实现接口以解析具有特定类型/名称的参数
});
$argument_resolver=新ArgumentResolver(新ArgumentMetadataFactory(),$resolvers);
//要使用它:
$arguments=$argument\u解析器->getArguments($request,[$datasource,'query']);
$datasource->query(…$arguments);
我希望这对其他人有用


我不能证明这是一个解决方案,或是最好的解决方案,但它似乎对我的用例有效。我欢迎其他人发表评论/回答,以便我们能够共同改进解决方案