PHP-DI 6提供了多种功能,可在definitions中使用。其中三个似乎在定义上下文中也是如此:autowire(...)
,create(...)
和get(...)
。例如。我有以下类型:
FooServiceInterface
BarServiceInterface
FooAService implements FooServiceInterface
dependencies: BarServiceInterface $barService
FooBService implements FooServiceInterface
dependencies: BarServiceInterface $barService
BarService implements BarServiceInterface
dependencies: -
FooServiceInterface
被注入Symfony控制器(构造函数注入)。
现在我的文件带有定义:
return [
FooServiceInterface::class => DI\autowire(FooBService::class),
BarServiceInterface::class => DI\autowire(BarService::class),
];
有效。
我也可以这样设置:
return [
FooServiceInterface::class => DI\get(FooBService::class),
BarServiceInterface::class => DI\get(BarService::class),
];
它仍然有效。
此
return [
FooServiceInterface::class => DI\create(FooBService::class),
BarServiceInterface::class => DI\create(BarService::class),
];
不起作用。
这个
return [
FooServiceInterface::class => DI\get(FooBService::class),
BarServiceInterface::class => DI\create(BarService::class),
];
确实
三个函数之间有什么区别(在定义的上下文中)?建议使用哪一个设置公共接口依赖关系定义(如SomeInterface::class => DI\recommendedFunction(SomeClass::class)
)?
答案 0 :(得分:1)
我会说只有在你知道为什么需要它时才使用get()
。
然后在autowire()
和create()
之间进行选择取决于您:您是否需要自动装配?
简单地使用create()
告诉PHP-DI只需要new FooService()
来创建服务。如果那还不够,那就好了。如果您的服务具有依赖关系,则可以依赖自动装配(使用autowire()
)或定义依赖关系以使用create()
手动注入。它取决于你。