在Symfony 2中使依赖项在运行时可配置?

在Symfony 2中使依赖项在运行时可配置?,symfony,dependency-injection,doctrine-orm,inversion-of-control,dbal,Symfony,Dependency Injection,Doctrine Orm,Inversion Of Control,Dbal,在我的可重用捆绑包中,我可以指定连接名称(DBAL连接): 在扩展中,我给它加了别名: 并在需要时注入(捆绑包中有4-5个服务)。一切正常 不幸的是,连接应该(可能)在运行时更改,即在用户经过身份验证(即使用HTTP基本身份验证)之后。当用户名为foo时,则使用foo\u数据库,当bar时,则使用bar\u数据库 我的解决方案(变通方法): 现在我正在使用事件系统更改它:当捆绑包中的某个东西使用连接对象时,我会发出一个事件,即MyBundle::BAR事件。侦听器可以使用setConnectio

在我的可重用捆绑包中,我可以指定连接名称(DBAL连接):

在扩展中,我给它加了别名:

并在需要时注入(捆绑包中有4-5个服务)。一切正常

不幸的是,连接应该(可能)在运行时更改,即在用户经过身份验证(即使用HTTP基本身份验证)之后。当用户名为
foo
时,则使用
foo\u数据库
,当
bar
时,则使用
bar\u数据库

我的解决方案(变通方法):

现在我正在使用事件系统更改它:当捆绑包中的某个东西使用
连接
对象时,我会发出一个事件,即
MyBundle::BAR
事件。侦听器可以使用
setConnection(connection$connection)
更改连接。然后在我的包中,我使用更新的连接调用
getConnection()

然而,这个解决方案迫使我倾听每一个需要改变连接的事件。如果我忘了听
MyBundle::FOO
事件怎么办?我的应用程序将无法按预期工作,错误将难以理解和跟踪


有没有解决这个问题的好方法?

我知道Sylius对容器参数做了一些处理,这样就可以在条令映射中定义接口,并且基本模型类可以与条令ORM或条令MongoDB ODM一起使用,而不必分别指定
实体
文档
类。我认为这可以通过覆盖
MyBundle::boot()
并操作那里的参数来实现。@AdamElsodaney嘿,谢谢。你能给我指出正确的类或文件吗?
# config.yml
my_bundle:
    connection: ~ # or "default", or "my_connection"
// MyBundleExtension.php
$container->setAlias(
    'my_bundle.connection',
    'doctrine.dbal.'.$config['connection'].'_connection'
);