如何在 PHP-DI 的定义中使用 autowire(..)、create(..) 和 get(...)



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() 定义要手动注入的依赖项。这取决于你。

相关内容

  • 没有找到相关文章

最新更新