1

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))?

4

1 回答 1

2

我会说get()只有当你知道你为什么需要它时才使用它。

然后在两者之间进行选择autowire()并由create()您决定:您是否需要自动装配?

简单地使用create()就是告诉 PHP-DI 只做new FooService()创建服务。如果这足够了,那很好。如果您的服务具有依赖项,您可以依赖自动装配(使用autowire())或定义依赖项以使用手动注入create()。由你决定。

于 2018-03-27T07:51:03.350 回答