Dependency Injection

Dependency Injection (DI) is een eenvoudig ontwerppatroon dat er kortgezegd op neer komt dat klassen niet binnen andere klassen worden geinstantieerd maar er naast. Het eerst geinstantieerde object kan dan aan andere klasses als argument worden meegegeven. Dit zorgt er voor dat de afhankelijkheden minder worden. Binnen een klasse hoef je niet meer te prutsen aan een andere klasse.

Voorkomen dat een klasse diepere kennis nodig heeft over de implementatie van andere componenten, dat is waar Dependency Injection over gaat

Dependency Injection Container

Als een service afhankelijk is van een heleboel andere services wordt het een hele toer om telkens als je die service nodig hebt eerst ook alle afhankelijkheden aan te roepen. Voor de service is dat echter noodzakelijk. Het is de Dependency Injection Container die hier zorg voor draagt en al deze afhankelijkheden op de juiste manier implementeerd. Het is als het ware een schil om de service heen.

De Container in Symfony

De Dependency Injection Container in Symfony wordt geregeld door de sfServiceContainer klasse. De contaier wordt extended met deze klasse. Hierdoor komt er aeen aantal methodes beschikbaar mists aan een aantal conventies wordt voldaan. Methodes waarvan de naam beging met get en eindigt met Service implementeren een service waarvan de naam uit het tussenliggende deel wordt samengesteld: voorbeeld getMailTransportService() implementeerd de service mail_transport. Deze methodes zijn protected Door allerlei conventies maakt de sfServiceContainer de toegang tot de service en parameters makkelijker. Na enige oefening ga je de uniformiteit die deze klasse biedt waarderen.