假设在我的Zf2应用程序中,我有一个通过服务管理器检索的类A
'service_manager' => [
'invokables' => [
'A' => 'A'
]
]
如果每次检索类A
时,我都想返回A
的decorator B
,那么我可以使用delegator工厂。
现在,如果我想以这种方式装饰实现接口I
的所有类,无论何时从服务管理器检索它们,该怎么办?初始化程序在这里似乎没有帮助,因为它们不能替代从服务管理器检索到的实现。
有办法做到这一点吗?任何建议都非常感谢
您可以创建一个自定义插件管理器,负责创建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')