fbpx

Dependency injection – Come iniettare servizi taggati

Tagged services

Per indicare che un servizio svolge un particolare ruolo in Symfony è possibile configurarlo aggiungendo uno o più tags alla sua definizione. Per esempio, etichettando un servizio con il tag twig.extension si indica a Symfony che il servizio deve essere trattato come una estensione di twig.

Questo meccanismo è ampiamente usato in Symfony (vedere qui l’elenco di tutti tag disponibili nel core https://symfony.com/doc/current/reference/dic_tags.html) e può essere personalizzato per le proprie necessità.

Come utilizzarli

Supponiamo di voler costruire una classe in cui vogliamo iniettare una categoria di servizi, per esempio per fornire una serie di regole da applicare in fase di esecuzione.

Per esempio, pensiamo ad una classe che possa applicare due politiche di sconto differenti in base alle caratteristiche del cliente.

Imposteremo le classi in questo modo:

Le due implementazioni di ScontoPolicy dovranno essere iniettate in ScontoContext. I due servizi dovranno essere taggati, per esempio, con il tag app.politiche_di_sconto

Per iniettarli in PoliticaDiScontoContext sarà a questo punto sufficiente impostare un parametro di tipo tagged nella definizione di servizio di quest’ultima classe.

Nicola Fornaciari
Nicola Fornaciari
Articoli: 3

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.