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滚入Aor C?A并且C是集合/容器样式类,我会有很多。会在为每个组合创建的类中创建爆炸式增长。


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


new A([

 new B('b1'),

 new B('b2'),

 new B('b3'),

]);


...


new C([

 new B('b4'),

 new B('b99'),

 ...

]);


...


new D([

 ...

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


千万里不及你
浏览 65回答 1
1回答

守着星空守着你

我发现的解决方案是内联服务定义!您可以通过添加!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:
打开App,查看更多内容
随时随地看视频慕课网APP