DI statement – add dynamic arguments

Barbarossa
Člen | 74
+
0
-

Ahoj, prosím o radu. Rád bych si zaregistroval službu v DI, ale nedaří se mi předat potřebné argumenty.
Je to služba třetí strany a bohužel je ten přístup takový jaký je :(

Běžné použití

$client = new Client([
	'projectId' => 'xxx',
]);

$pack = $client->pack('pack-name'); // vrací třídu Pack()

$adapter = new Adapter($client, $pack);

DI extension (návrh)

$builder->addDefinition($this->prefix('client'))
	->setFactory(Client::class)
	->setArguments([
		['projectId' => 'xxx']
	]);

// potřebuji ideálně Statement (kvůli další návaznosti)
$statement = new Statement(Adapter::class, [
	// Client se v pohodě předá - už je zaregistrovaný ale jak z něho převzít ten pack a předat ho sem jako argument?
]);

Díky za každou radu

Editoval Barbarossa (16. 4. 2019 20:53)

h4kuna
Backer | 740
+
+1
-

jsou dvě možnosti

  • pack vyrobíš jako definition
$builder->addDefinition($this->prefix('pack'))
    ->setFactory($this->prefix('@client') . '::pack', ['pack-name']);
  • nebo by to mohlo jít rovnou zařídit pomocí Statement
$statement = new Statement(Adapter::class, [
    //client,
	new Statement($this->prefix('@client') . '::pack', ['pack-name'])
]);

kód jsem netestoval

Barbarossa
Člen | 74
+
0
-

Díky moc funguje!