Při každém requestu se generuje DIC
- Gappa
- Nette Blogger | 208
Ahoj,
narazil jsem na problém s tím, že se mi v debug režimu generuje při každém requestu DIC.
Co jsem zatím vypozoroval:
scanDirs: false
- Ve vendoru je presenter.
- 2× volá DependencyLoader::isExpired() a v obou případech true.
V čistém Nette 3 web-project je to jednou. Také mi zůstává soubor
temp\cache\nette.application\touch
, webproject má tento adresář prázdný.
Pokud zapnu scanDirs
, resp. zakomentuji a nechám výchozí
hodnotu, tak je to ok, DIC se vygeneruje jen když je potřeba.
Vypnuté scanDirs
mám proto, že pod app/ jsou rozšíření,
která nemusí být nutně aktivní – a pokud nejsou, tak by načtené
presentery házely výjimku na chybějících závislostech.
Dělám něco špatně? Dá se to dělat lépe/jinak?
Díky za jakékoliv info :)
Verze balíčků:
latte/latte v2.6.1
nette/application v3.0.4
nette/bootstrap v3.0.1
nette/caching v3.0.1
nette/component-model v3.0.0
nette/di v3.0.3
nette/finder v2.5.2
nette/forms v3.0.3
nette/http v3.0.3
nette/mail v3.1.0
nette/neon v3.1.0
nette/php-generator v3.3.3
nette/robot-loader v3.2.1
nette/routing v3.0.0
nette/safe-stream v2.4.0
nette/schema v1.0.2
nette/security v3.0.3
nette/tester v2.3.1
nette/utils v3.1.0
- Marek Bartoš
- Nette Blogger | 1274
scanDirs registruje presentery z definované složky do služeb,
scanComposer z autoload classmap. Když ty options zrušíš nebo máš
presenter někde, kde jej nenajdou, tak použití presenteru způsobí
přegenerování kontejneru s cílem znovu spustit prohledávání složek a
classmapy, jestli jsi jej nově nepřidal.
Řešení je jednoduché, registruj si presentery do služeb sám.
- Gappa
- Nette Blogger | 208
Díky za vysvětlení, už chápu, kde byl problém.
Zároveň jsem trošku bojoval s jiným chováním mezi Nette 2.4 a 3.0. Což může/nemusí být bug.
Nakonec jsem tedy posunul scanDirs
do adresáře
app/modules/
a presentery rozšíření registruji až v nich.