Service Injecting ============================ Sono presenti vari modi per poter utilizzare i :ref:`servizi registrati nell'applicativo` ma uno dei più performanti e comodi è chiamato *Service Injecting* e consiste nella richiesta di un servizio tramite la dichiarazione di un parametro o di un costruttore .. note:: Resta comunque possibile l'utilizzo dei servizi registrati attraverso il ServiceProvider correlato. Esso può essere trovato nell'``HttpContext`` nella proprietà ``RequestServices`` oppure nell'``IApplicationBuilder`` nella proprietà ``ApplicationServices`` In applicativi ASP.NET Core sono presenti principalmente tre tipi di injecting supportati Costruttore L'injecting per costruttore consiste nell'inserire i servizi richiesti nel costruttore di un proprio servizio/controller e di lasciar fare al ServiceProvider la risoluzione e validazione dei servizi necessari .. literalinclude:: service-injecting-controller-example-flat.cs :lines: 15-18 :emphasize-lines: 1 :language: c# Annotation L'injecting per annotation è consentito solo nei controller e permette di usare servizi specifici per una data azione senza doverli risolvere ad ogni richiesta per tutte le azioni del controller. Per richiedere un servizio è sufficiente aggiungerlo come parametro e annotarlo con l'attributo ``FromServices`` .. literalinclude:: service-injecting-controller-example-flat.cs :lines: 25-31 :emphasize-lines: 3,4 :language: c# Razor L'injecting per le pagine o view Razor, invece, si svolge tramite la *langword* ``@inject`` nella sintassi ``@inject SomeService SomeVariableName`` che renderà disponibile il servizio richiesto nella pagina nella proprietà con il nome specificato .. note:: Quando in una pagina razor viene definito un servizio l'engine aggiungerà il servizio richiesto al costruttore della pagina e ne assegnerà il valore ad una proprietà protetta (readonly) con il nome scelto .. literalinclude:: service-injecting-controller-example.cs :linenos: :language: c# .. note:: Per dichiarare un servizio come opzionale sarà sufficiente segnare il parametro come opzionale (vedi riga 15 e 28) .. .. literalinclude:: service-injecting-controller-example.cs .. :lines: 15,14,28 .. :language: c# .. toctree::