Inject Nette\Caching\Cache v Nette 2.1

- Honza Marek
 - Člen | 1664
 
Problém: Potřebuju do servisy dostat instanci cache.
Pokud vim, kdysi v Nette byla v Nette factory na cache. Ovšem nikoliv jako servisa, ale jako metoda na contextu. Pokud jsem tedy chtěl vytvořit instanci cache, musel jsem mít context.
Změnilo se něco? Jsou v nette ještě vůbec ty factories? (Pokud se někomu zdá, že jsem poslední dobou trochu zaspal vývoj Nette, tak to možná bude pravda ;) )

- Pavel Macháň
 - Člen | 282
 
Honza Marek napsal(a):
Problém: Potřebuju do servisy dostat instanci cache.
Pokud vim, kdysi v Nette byla v Nette factory na cache. Ovšem nikoliv jako servisa, ale jako metoda na contextu. Pokud jsem tedy chtěl vytvořit instanci cache, musel jsem mít context.
Změnilo se něco? Jsou v nette ještě vůbec ty factories? (Pokud se někomu zdá, že jsem poslední dobou trochu zaspal vývoj Nette, tak to možná bude pravda ;) )
Třeba
class Cokoliv {
    /** @var \Nette\Caching\Cache */
    private $cache;
    public function __construct(Nette\Caching\IStorage $storage) {
        $this->cache= new Cache($storage);
    }
}
					Editoval EIFEL (27. 1. 2014 16:22)

- Honza Marek
 - Člen | 1664
 
Nevím jak souvisí Session s tím, co jsem psal. Nicméně když zkusím prostě autowirovat Cache, tak to neprojde, protože má autowire nastaveno na ne.

- Pavel Macháň
 - Člen | 282
 
Honza Marek napsal(a):
Nevím jak souvisí Session s tím, co jsem psal. Nicméně když zkusím prostě autowirovat Cache, tak to neprojde, protože má autowire nastaveno na ne.
Jo promin sem se prehlidnul :) No mužeš si tam třeba injectnout Nette\Caching\IStorage a v konstruktoru vytvorit z toho cache
EDIT: upravil sem predchozi post
Editoval EIFEL (27. 1. 2014 16:24)

- Pavel Macháň
 - Člen | 282
 
Myslím, že by to mělo jít i nastavit ručně v konfigu přímo na Cache
services:
	- Cokoliv(\Nette\Caching\Cache(@cacheStorage))
Ale ruku do ohně za to nedam
Editoval EIFEL (27. 1. 2014 16:29)

- Jan Tvrdík
 - Nette guru | 2595
 
Jo, to by mělo fungovat. Většinou je dobré uvést rovnou namespace.
services:
    - MyService(Nette\Caching\Cache(@cacheStorage, cacheNamespace))
nebo
services:
    - MyService(Nette\Caching\Cache(..., cacheNamespace))
				
- Pavel Kouřil
 - Člen | 128
 
Tipl bych si, že ten důvod bude, že továrny v 2.0 celkově byly k ničemu (nešly autowirovat).