UI Composition: fare injection di componenti della UI da qualche parte, pensiamo ad esempio un plugin. Con WPF possiamo farlo senza spararci!
Perchè ci serve fare UI Composition?
- Cliente: necessità di modularizzare:
- Acquistare in configurazioni diverse
- installare in configurazioni diverse
- Team: necessità di gestire e lavorare
Che problemi ci pone?
- Region Management
- Comunicazione tra attori che non si conoscono
- Gestione ciclo di vita plugin/modulo
- Obbligatorietà di IoC perchè bisogna avere a che fare con i contratti
Le Region, che sono le parti della UI in cui iniettiamo i nostri controlli, possono essere statiche o dinamiche, quelle statiche le possiamo individuare semplicemente con il nome, quelle dinamiche invece hanno bisogno di nome + contenitore che ci ospita. WPF e XAML ci danno massima libertà grazie alle Attached Property.
Ma come comunicano i vari elementi di interfaccia iniettati? Utilizzando un MessageBroker che ci permette di definire oggetti di tipo IMessage e spedirli: i moduli interessati a ricevere i messaggi si sottoscrivono al broker.
Prism è un framework di UI Composition, disponibile su codeplex in due versioni, la 1 e la 2. Nella 1 non sono supportate le region dinamiche. Funziona sia con Silverlight che con WPF.