Dvě services v configu, jedna je potomkem druhé
- chikeet
- Člen | 160
Zdravím,
existuje nějaké řešení pro situaci, kdy mám v configu zaregistrované
dvě služby, kde jedna je potomkem druhé?
Máme v rámci týmu nějaké vlastní knihovny, které si taháme přes composer. Jedna z nich si v configu (svém vlastním) registruje službu pro práci s uživateli, dejme tomu TeamLib\UserService. Protože ale ve své aplikaci potřebuju UserService rozšířit, tak mám ještě vlastní App\UserService, která je potomkem zmíněné TeamLib\UserService.
Při generování DI containeru dostanu následující chybu:
Nette\DI\ServiceCreationException
Multiple services of type TeamLib\UserService found: teamLib.userService,
150_App_UserService
Dá se to nějak rozumně řešit? Pojmenovávat službu se mi nechce, pokud to nebude nutné. Zasahovat do knihovny, to je otázka, zatím jsme s ní na začátku, takže by to ještě šlo, zvlášť pokud je to koncepčně blbě a povede to k problémům. Za jakékoliv konstruktivní nápady budu ráda.
Editoval chikeet (6. 10. 2015 16:28)
- David Matějka
- Moderator | 6445
Bez pojmenovanych sluzeb to asi nijak (snadno) vyresit nepujde.
U knihoven je prave z takovyhle duvodu lepsi sluzby pojmenovavat a anonymni sluzby pouzivat pouze v aplikaci.
- Pavel Kravčík
- Člen | 1195
Řešil jsem to abstraktním předkem, který není registrovaný. Tj. mají společnou funkčnost, ale vytváří se každá zvlášť. A pak existují 2 služby PSAKlientModel a KlientModel. DRY to asi je. Jestli je to hezké to nevím, ale je to funkční a nepřijde mi to jako prasárna. I když KlientModel je vlastně prázdný.
- Tomáš Votruba
- Moderator | 1114
Záleží na architektuře tvého use case. Můžeš také extrahovat interface a použít jednu třídu jako fasádu a druhou do ní předat.
Hodil by se zdroják s metodami, např. hodit na Gist.