ASP.NET MVC: 4 modi per rendere una proprietà del ViewBag disponibile in tutte le View

Quando si ha a che fare con siti che prevedono un gran numero di View capita spesso di trovarsi a inserire ripetutamente alcune variabili nell'oggetto ViewBag di ciascuna di esse. Alcuni esempi tra i più ricorrenti, per lo meno nei miei progetti, sono i classici IsAdmin, IsAuthenticated, AvatarURL e così via. In questo tipo di situazioni, onde evitare di scrivere ripetutamente lo stesso codice, è consigliabile adottare un metodo che consenta di inserire queste variabili nel ViewBag di tutte le viste in modo centralizzato. Gli approcci che vanno per la maggiore per ottenere questo risultato sono i seguenti:

1. Utilizzare una Base Class.

PRO: Semplice da implementare, efficace, centralizzato (fin troppo).
CONTRO: Costringe a derivare tutti i controller dalla base class, il che può risultare sconveniente se si ha a che fare con un gran numero di controller già esistenti e/o basati su classi base non modificabili.

 

2. Utilizzare un Module.

PRO: Nessuno in particolare.
CONTRO: Nessuno in particolare (a parte una scarsa intuitività del metodo).

 

3. Impostare la proprietà in fase di RegisterController

PRO: Ideale per un design pattern basato su IoC.
CONTRO: Non ha molto senso in tutti gli altri casi.

 

4. Utilizzare un ActionFilter e registrarlo in fase di Global.asax / Application_Start.

PRO: E' il metodo meno invasivo (e più versatile) tra quelli proposti.
CONTRO: Nessuno in particolare.

Come sempre, la soluzione preferibile varia a seconda delle caratteristiche del progetto e delle necessità dello sviluppatore: ciò detto, la mia preferita è senz'altro la quarta per i motivi espressi.

E la vostra?

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

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


The reCAPTCHA verification period has expired. Please reload the page.

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