Selhávání autowiringu: výjimka nebo NULL?
- David Grudl
- Nette Core | 8227
Mám v DI zaregistrovaných 10 objektů, všechny implementují určitý interface. Přidávám službu, která v konstruktoru získává objekt implementující tento interface. V tuto chvíli autowiring parametru selže, protože existuje 10 služeb, které vyhovují. Vyhodí se výjimka.
Co v případě, že je parametr v konstruktoru nepovinný? Má autowiring vyhodit výjimku (současná implementace) nebo tiše předat NULL?
- David Grudl
- Nette Core | 8227
Jiná možnost než výjimka a NULL asi nepřichází v úvahu. Další věc je, že by ContainerBuilder mohl vygenerovat nějaké info (třeba formou komentáře, logu), proč se tak rozhodl kvůli ladění.
- finwe
- Člen | 58
V návaznosti na tom, že mě zmátlo, proč šest presenterů zůstane v containeru tiše v pořádku běžet, ale když tam přidám webloader, tak se všech sedm služeb označí jako duplicitní.
Sám bych byl za zachování výjimky, jen třeba s hintem v message exception nebo někde v logu. Spíš v message.
- Šaman
- Člen | 2662
- ad duplicity: Problém je se službami, které si Nette vytváří samo (např. PresenterFactory). Nešlo by v případě duplicity brát jako prioritní službu která byla definovaná ručně v configu? A až pokud bude víc definovaných (nebo žádná) tak výjimku?
- chápu to tak, že se řeší případ, kdy mám konstruktor s nepovinným parametrem nějaké služby a pokud se tato nedohledá automaticky, tak že se hodí výjimka? Proč, když je parametr nepovinný? (Často mám možnost nastavení v konstruktoru nepovinně, přitom v reálu pak parametry settím za běhu. To už by nefungovalo?) Pokud by to bylo tak jak píšu, tak určitě NULL.
Editoval Šaman (3. 2. 2012 0:40)