Zavolání továrničky ze služby

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Rada
Člen | 9
+
0
-

Ahoj,
potřeboval bych poradit s jednou věcí a DI…

Dejme tomu, že mám službu která vytváří seznam objektů

<?php
class FooService {
.
.
.
	public function getList(){
		$list = array();

		foreach ($this->data as $row) {
			// Ziskani dat napr. z DB ...
			// Vytvoreni instance objektu
			$objekt = nejakaFactory();
			// Naplneni dat a pridani do seznamu ...
			$list[] = $objekt;
		}

		return $list;

	}
.
.
.
}
?>

v config.neon mám zaregistrovanou službu a továrničku.

Je možné ze služby zavolat vytvoření objektu přes továrničku?

Děkuju za pomoc.

Filip Procházka
Moderator | 4668
+
0
-

Yes you can!

interface IFooFactory
{
	/** @return Foo */
	function create();
}

class FooService
{
	private $fooFactory;

	public function __construct(IFooFactory $fooFactory)
	{
		$this->fooFactory = $fooFactory;
	}

	public function getList()
	{
		$list = array();
		foreach ($this->data as $row) {
			$objekt = $this->fooFactory->create();
			// ...
			$list[] = $objekt;
		}

		return $list;
	}
}

a konfigurace

services:
	foos: FooService

factories:
	fooFactory:
		implement: IFooFactory

Btw, nemusíš za každou cenu používat továrničky. Pokud se snažíš vytvářet něco, co nemá závislosti, tak by to mohlo být dokonce kontroverzní ;)