PHP-DI 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\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)
)?