Při každém requestu se generuje DIC

Gappa
Nette Blogger | 208
+
0
-

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
+
+1
-

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
+
0
-

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.