[DI] Service providers
Ik snap nu wel het principe van DI, maar nog niet echt de serviceproviders.
Nu dacht ik dat een serviceprovider dit is:
- Je hebt een router, en die wil je in je DI stoppen
- De router implements een ServiceProvider class die je verplicht om een register() method aan te maken.
- Je register method returnt een string als 'Framework\Router\Router'
- En als de router class aangeroepen word word de class geregistreerd in de DI met behulp van de register() method.
Nu heb ik toch een paar vraagjes:
- Moet je je services niet in een config bestand instellen ipv in de class zelf?
- En als ik dan toch via de class zelf ga werken, hoe zorg ik er voor dat die register() method aangeroepen word?
Moet ik dan bij iedere router call ->register() doen?
Iemand die dit kan ophelderen?
Raoul
Om een voorbeeldje te geven:
In Symfony2 gebruik je configuratie om een service te registreren:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<services>
<service id="router" class="Raoul\Framework\Routing\Router">
<parameter id="url_matcher"/>
<parameter id="routecollection"/>
</service>
</services>
<service id="router" class="Raoul\Framework\Routing\Router">
<parameter id="url_matcher"/>
<parameter id="routecollection"/>
</service>
</services>
Nu heb je de 'router' service geregistreerd. Je ziet, er komt naast de parser voor het XML file en het omzetten van parser data naar een service, geen klasse aan te pas.
In Silex gebruiken ze service providers. Dit zijn klassen die een register method hebben die alle nodige services en parameters voor een bepaalde library instellen. Zo heb je bijv. een SecurityServiceProvider klasse die alle services aanmaakt voor de security (authentication manager, access manager, user checker, ect.)
Een ServiceProvider is dus geen method die wordt geimplementeerd in de service, maar eentje die een eigen klasse heeft en die meerdere services en parameters instelt.
Gewijzigd op 14/01/2013 19:50:50 door Wouter J
Maar hoe kan m'n framework dan herkennen dat een ServiceProvider class dan effectief bestaat?