假设在我的Zf2应用程序中,我有一个通过服务管理器检索的类A
'service_manager' => [
'invokables' => [
'A' => 'A'
]
]
如果,每次我检索课程A
时,我都希望返回B
的装饰工A
,我可以使用委托工厂。
现在,只要我从服务管理器中检索它们,我想用这种方式装饰所有实现接口I
的类?初始化程序似乎没有帮助,因为它们无法替代从服务管理器检索到的实现。
有办法做到这一点吗?任何建议都非常感谢
答案 0 :(得分:0)
您可以创建一个自定义插件管理器,负责创建I
类型的服务。
这将允许您为每个服务(或抽象工厂)注册自定义工厂,并仍然装饰向服务管理器注册的原始服务。
以下配置可能有助于解释。
return [
'service_manager' => [
'invokables' => [
'A' => 'A',
'B' => 'B',
]
],
'foo_plugin_manager' => [
'factories' => [
'B' => 'FactoryB'
],
'abstract_factories' => [
'AbstractFactoryThatDecoratesAll',
]
],
];
此方法的问题是您需要更新对
的任何调用$serviceManager->get('A')
与
$serviceManager->get('FooPluginManager')->get('A')