Dependency injection 如何在PHP-DI的定义中使用autowire(…)、create(…)和get(…)?
6提供了多种功能,可在中工作。其中三个在定义上下文中的作用似乎是相同的: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
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),
];