2

如果没有 DI 容器,您通常会执行以下操作:

$foo = (new FooBuilder)
->setA('a')
->setB('b')
->build();

// where $foo becomes an instance of Foo class

你如何在Aura.Di中注册/容器化类似的东西?

4

1 回答 1

2

找到了。对于那些关心的人,它是lazyGetCall()

例如,如果你有这样的事情:

$foo = (new FooBuilder)
->setA('a')
->setB('b')
->build();

您可以像这样将其容器化:

$builder = new \Aura\Di\ContainerBuilder;
$di = $builder->newInstance();
$di>setters['FooBuilder']['setA'] = 'a';
$di>setters['FooBuilder']['setB'] = 'b';
$di->set('FooBuilder', $di->lazyNew('FooBuilder'));
$di->set('Foo', $di->lazyGetCall('FooBuilder', 'build'));

然后,您可以像这样在其他地方调用它:$fooInstance = $di->get('Foo');

于 2020-01-22T18:00:21.177 回答