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
 
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
 
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í ;)