problém s DI při duálním použití stadardní cachStorage a memcache

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

Ahoj,

pro konfiguraci Nette a jeho cache chci ponchat jeho standardní cacheStorage (filestorage), ale pro některé aplikační DB dotazy a výsledky bych rád použil memcache.

Pokouším se tedy v config.neon udělast nějakou service, kde bych měl memcache, ale to mi umře, již při vytvoření memcacheStorage hláškou:

„Service ‚nette.cache‘: Multiple services of type Nette\Caching\IStorage found: cacheStorage, mStorage“.

V configu Neon se o to snažím následujícím způsobem:

<script>
common:
    php:
        date.timezone: Europe/Prague

    parameters:
        .....


    services:
        .....
        mStorage:
            class: \Nette\Caching\Storages\MemcachedStorage('localhost', 11211, 'xxx')
        mCache:
            class: \Nette\Caching\Cache(@mStorage)
</script>

Chápu, že je tam nějaký problém s tím, že RobotLoader si asi založil cacheStorage to má stejné rozhraní jakou mnou volané mStorage, ale nevím proč by to mělo být v konfliktu?
Napadne někoho jak to pořešit?

mkoula
Backer | 57
+
0
-

Ahááá, už vím, ale chtělo by to lépe zdokumentovat:

Pokud chcete vyhodit třídu, aby nekolidovala zadate autowired: no v configu. Viz:

<script>
        mStorage:
            class: \Nette\Caching\Storages\MemcachedStorage('localhost', 11211, 'xxx')
            autowired: no
</script>
ricco24
Člen | 141
+
0
-

Neviem čo by si chcel lepšie dokumentovať – presne toto sa spomína v dokumentácii

Editoval ricco24 (19. 4. 2012 17:13)

gliny
Člen | 25
+
0
-

Kontrolní dotaz, jak jsi potom dostal tu službu do Presenteru, když neni autowired?

Filip Procházka
Moderator | 4668
+
0
-

Úplně stejně, jako bys dostával do presenteru parametry z DIC, protože ty nepotřebuješ v presenteru memcache, ty potřebuješ nějaký model, který shodou okolností odkládá věci do například memcache :)

hejdav
Člen | 50
+
0
-

A co když chci do backendu vyrobit tlačítko [clean memcache] ? Pak potřebuju injectnout právě MemcachedStorage.