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