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 => DIautowire(FooBService::class),
BarServiceInterface::class => DIautowire(BarService::class),
];
它有效。
我也可以这样设置它:
return [
FooServiceInterface::class => DIget(FooBService::class),
BarServiceInterface::class => DIget(BarService::class),
];
而且它仍然有效。
这
return [
FooServiceInterface::class => DIcreate(FooBService::class),
BarServiceInterface::class => DIcreate(BarService::class),
];
不行。
而这个
return [
FooServiceInterface::class => DIget(FooBService::class),
BarServiceInterface::class => DIcreate(BarService::class),
];
确实如此。
这三个功能之间有什么区别(在定义的上下文中(?哪一个是设置通用接口依赖定义(如SomeInterface::class => DIrecommendedFunction(SomeClass::class)
(的推荐函数?
我会说只有在你知道为什么需要它时才使用get()
。
然后,在autowire()
和create()
之间进行选择取决于您:您是否需要自动布线?
使用简单的create()
告诉 PHP-DI 只做new FooService()
来创建服务。如果这就足够了,那就好了。如果您的服务具有依赖项,则可以依赖自动连线(使用 autowire()
(,也可以使用 create()
定义要手动注入的依赖项。这取决于你。