Selhávání autowiringu: výjimka nebo NULL?

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

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?

mishak
Člen | 94
+
0
-

Co takhle použít prioritu? Pokud není zadaná první má nejvyšší pak druhý…

Pavel Kouřil
Člen | 128
+
0
-

Já jsem spíš pro výjimku, todle se imho chová až moc magicky :)

David Grudl
Nette Core | 7790
+
0
-

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í.

Tharos
Člen | 1029
+
0
-

Mně připadá současná implementace nejlogičtější. Vlastně si ani pořádně nedokážu představit nematoucí využití implementace s předáváním null.

Vznikl nápad změnit současné chování „z čista jasna“, anebo v souvislosti s nějakou skutečnou situací?

finwe
Člen | 58
+
0
-

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.

Jan Endel
Člen | 1016
+
0
-

+1 Výjimkám

Šaman
Člen | 2594
+
0
-
  1. 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?
  2. 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)