Symfony DI在不创建大量服务别名的情况下将带有参数的新实例传递给构造函数



我有一个超级有用的类B,它有一个单参数构造函数。

我将在Symfony DI中定义其他服务时大量使用此类。

如何避免为了创建别名而重复B服务定义N次?

我喜欢使用的伪代码:

A:
aruguments:
$someList:
- B 'b1'
- B 'b2'
- B 'b3'
C:
arguments:
$someOtherList:
- B 'b4'
- B 'b999'
- ...
D:
...

为什么我有这么多B?因为在我的算法中有重复的行为,而通过构造函数使用单个参数的B就足够了,永远不会重复这种行为。

为什么我不能将B滚动到ACAC是集合/容器样式的类,我会有很多这样的类。将在为每个组合创建的类中创建爆炸。

如果没有DI,我会写什么代码?

new A([
new B('b1'),
new B('b2'),
new B('b3'),
]);
...
new C([
new B('b4'),
new B('b99'),
...
]);
...
new D([
...

那么,我该如何编写等效的symfony服务定义呢?

我找到的解决方案是内联服务定义!

您可以通过在包含必要数据的对象前添加!service来实现这一点:

A:
aruguments:
$someList:
- !service { class:B, arguments: ['b1']}
- !service { class:B, arguments: ['b2']}
- !service { class:B, arguments: ['b3']}
C:
arguments:
$someOtherList:
- !service { class:B, arguments: ['b4']}
- !service { class:B, arguments: ['b999']}
- ...
D:

最新更新