Dependency injection 如何在PHP-DI的定义中使用autowire(…)、create(…)和get(…)?

Dependency injection 如何在PHP-DI的定义中使用autowire(…)、create(…)和get(…)?,dependency-injection,dependencies,php-di,Dependency Injection,Dependencies,Php Di,6提供了多种功能,可在中工作。其中三个在定义上下文中的作用似乎是相同的:autowire(…)、create(…)和get(…)。例如,我有以下类型: FooServiceInterface BarServiceInterface FooAService implements FooServiceInterface dependencies: BarServiceInterface $barService FooBService implements FooServiceInterfac

6提供了多种功能,可在中工作。其中三个在定义上下文中的作用似乎是相同的:
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\get(FooBService::class),
    BarServiceInterface::class => DI\create(BarService::class),
];
是的

这三种功能(在定义中)有什么区别?哪一个是设置公共接口依赖项定义的推荐函数(如
SomeInterface::class=>DI\recommendedFunction(SomeClass::class)
)?

只有在知道需要它的原因时,我才会说使用
get()

然后在
autowire()
create()
之间进行选择取决于您:您是否需要自动布线


简单地使用
create()
就是告诉PHP-DI只需执行
newfooservice()
即可创建服务。如果够了,那就好了。如果您的服务具有依赖项,则可以依赖自动连线(使用
autowire()
)或使用
create()
定义要手动注入的依赖项。这取决于您。

自动布线如何影响性能?撇开方便不谈(这使自动连线成为更好的选择),使用PHP定义与自动连线相比,有什么好处吗?特别是从性能的角度来看?在这里找到一个相关的响应-关于性能,请阅读文档:不要阅读问题,它们可能已经过时。
return [
    FooServiceInterface::class => DI\get(FooBService::class),
    BarServiceInterface::class => DI\create(BarService::class),
];