symfony – 选择许多服务之一作为要使用的服务

场景:

>我使用依赖注入组件作为独立组件.没有捆绑/ symfony框架和东西.
>我有一套服务,负责类似的事情,例如用于通过不同方式将数据写入硬盘(例如,通过ftp,直接文件操作,存储到数据库中,……)
>这些服务中的每一个都需要不同的配置(例如,sql凭据,ftp凭证,……)
>我想将其中一个服务定义为“使用的一般服务”,以便其他服务具有依赖性.
>使用哪个服务由参数配置

例:

鉴于这些简化的参数和服务定义:

<parameter key="file.adapterType">direct</parameter>
<service id="file.db" />
<service id="file.ftp" />
<service id="file.direct" />

我想定义一个我真正想要使用的服务的别名

<service id="file.adapter" alias="file.%file.adapterType%"/>

其他服务只需依靠此服务:

<service id="photos">
    <argument type="service" id="file.adapter" />
</service>

到目前为止我尝试了什么:

>使用其alias-id中的参数定义别名.但是,alias-id中的参数无法解析.
>直接在参数标记内定义id – 再次参数未解析为:

<service id="photo">
    <argument type="service" id="file.%file.adapterType%" />
</service> 

>创建工厂. get-method接收参数和di-container并返回相应的服务:

public function get(ContainerInterface $container, $parameter) 
{
    return $container->get('file.' . $parameter);
}

但是,容器不会将自身注册为服务.从文件加载配置时,预先注册它不会生效(导致错误消息“找不到”service’container’):

$container->set("container", $container);
$loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/services'));
$loader->load('fileadapter.xml'); // << gives error
$container->get("container"); // << working

其他选择?

加载配置文件后,我无法设置别名,因为文件中的服务依赖于别名.

任何人都有其他想法如何处理这个?

最佳答案 实际上,我相信你在“我迄今为止尝试了什么”一节中的第三个要点是正确的,除了服务容器确实将自己注册为服务,但它被称为service_container,而不是容器.

点赞