将工厂传递给Symfony 2服务

5

我有一个依赖于数据库连接的类,大致如下:

class Test 
{
   private $conn;
   public function __construct(Connection $conn) {
       $this->conn = $conn;
   }
}

这项服务可能如下所示:
 services:
      service.test:
          class: Test
          arguments:
             - ["@database_connection"]

现在,我想要传递我的自定义连接服务/对象,在启动时创建一个Connection。但是我不能将它作为参数传递,因为它需要一个Connection对象,而不是工厂。

我该如何最好地解决这个问题?

我尝试在Test类中添加一个setConnection,但最好保持当前定义和服务不变。


你能否修改你的类,使其接受工厂作为依赖项? - Tomas Votruba
我可以这样做,但我更感兴趣的是那些不改变类本身的解决方案...只是好奇。 - Oli
我明白了,我认为可能有一种方法。你可以在YAML文件中添加工厂代码及其注册吗? - Tomas Votruba
1个回答

6

在Symfony的服务容器中,实际上已经有了解决这个问题的准备方案。

您的database_connection服务应该被配置为使用工厂来创建其实例。代码如下:

services:
    database_connection:
        class:   Connection
        factory: [ConnectionFactory, createConnection]

如果工厂也是一项服务,那么它可能会像这样:
services:
    database_connection:
        class:   Connection
        factory: ["@connection_factory", createConnection]

更多相关信息请点击此处查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接