WP7 Navigation Tip

Visto che scrivendo il mio primo “programma” per WP7, e cioè l’applicazione d’esempio di Sterling, ho avuto qualche problema con la navigazione, condivido questo link:

http://www.wintellect.com/CS/blogs/jgarland/archive/2011/02/16/silverlight-for-windows-phone-programming-tip-navigation.aspx

Non si sa mai che possa tornare utile a qualcuno Occhiolino

6th UgiAltNet

Sabato scorso ho partecipato, in qualità di spettatore e speaker, alla 6a conferenza organizzata da UgiAltNet dove ho avuto la possibilità di incontrare nuove persone, confrontarmi ed imparare un bel po’ di cose nuove! Alla fine della sessione, dove ho parlato di MEFedMVVM, ci sono stati circa 20 minuti di discussione su MVVM, MEFed e MEF dove ho ricevuto molte domande…a dir poco fantastico!

Qualcuno si è “lamentato” del fatto che MEF ci costringe ad utilizzare gli attributi per definire Imports e Exports. In realtà MEF è completamente customizzabile per cui se non ci piacciono gli attributi possiamo tranquillamente configurare il tutto by convention oppure scriverci un nostro “modello di configurazione”.

Che dire…grazie mille a Simone ed a tutti gli organizzatori per la disponibilità ed in particolare alle persone che hanno seguito la sessione!

Sterling goes to RTM

Giusto qualche ora fa Jeremy ha rilasciato l’RTM di Sterling, un database object-oriented per Silverlight e WP7.
Per chi volesse darci un occhio, giocarci o avere più informazioni troverà tutto il necessario su codeplex.

Nelle prossime settimane pubblicherò una serie di articoli su Sterling per cui…stay tuned!

MEFedMVVM ed il concetto di Context (View) Aware

Nel caso avessimo bisogno di fare “qualcosa” con la UI, MEFedMVVM mette a disposizione del ViewModel il concetto di Context aware o meglio di View aware tramite l’interfaccia IContextAware.

image

Se un ViewModel implementa questa interfaccia, MEFedMVVM richiamerà il metodo InjectContext, durante la composition, passandogli il contesto a cui è associato o meglio la View.

MEFed ha già al suo interno un paio di servizi che implementano IContextAware come IContainerStatus che, tramite gli eventi ContainerLoaded e ContainerUnloaded, ci offre sostanzialmente un wrapper verso gli eventi Loaded e Unloaded di FrameworkElement,

image

e IVisualStateManager che ci consente di interagire con il VisualStateManager

image

MEF for Real Business

Il 23 Febbraio avrò l’onore di tenere una sessione nella sede romana di DomusDotNet, dove vedremo un’introduzione a MEF con qualche caso d’uso reale e tanto tanto codice… e poi ovviamente ci sarà la consueta cena a cui non si può mancare A bocca aperta

Per iscrizioni e maggiori informazioni  vi rimando al post di Nicolò Sorriso

MEFedMVVM Composition & IComposer

Piccola nota: prima di leggere questo post si consiglia di dare un occhio ai due precedenti

http://blogs.ugidotnet.org/federicoD/archive/2010/09/09/mef-mvvm-mefedmvvm.aspx
http://blogs.ugidotnet.org/federicoD/archive/2011/01/27/caricare-assembly-non-referenziati-con-mefedmvvm.aspx

Chi ha già usato MEFedMVVM saprà benissimo che una volta dato un nome ai nostri ViewModel e, dopo aver specificato nelle View quale ViewModel ci serve, “qualcuno” si occuperà di far combaciare e funzionare tutto l’ambaradan.

Questo “qualcuno” è il LocatorBootstrapper, che insieme agli IComposers si occuperà di effettuare la composition. In particolare IComposer si occupa di definire quali sono i Catalogs da usare, per cui dove MEF andrà a cercare ViewModel, Services, e via dicendo, e ci consente anche di specificare se usare degli ExportProvider custom.

image

Il ComposablePartCatalog viene utilizzato dal LocatorBootstrapper come Catalog principale dove cercare tutte le ComposablePart, per cui, creando un’implementazione custom di IComposer possiamo dire, ad esempio, a MEFed di cercare su una cartella diversa da Extensions, su assembly diversi, etc…

Ora vediamo di capire perchè ci può servire un’implementazione nostra di IComposer. L’applicazione che utilizzeremo come esempio è la stessa usata nel post precedente … con qualche modifica.

image

MEFedMVVMDemo è la nostra applicazione WPF che conterrà l’App.xaml ed il composer customizzato, gli altri progetti direi che sono abbastanza autoesplicativi.

MEFed offre già un Message Broker ed un ViewModel di base, ma noi vogliamo usare MvvmLight Sorriso Nell’esempio iniziale, nel costruttore dei ViewModels richiedevamo IMediator (presente in MEFed), ora lo sostituiamo con IMessenger (presente in MvvmLight).
Però c’è un piccolo problema…l’implementazione di IMessenger non è marcata con l’attributo ExportService, per cui MEFed non sarà in grado di istanziare i ViewModels e quindi il processo di composition fallirà.

Visto che non siamo in grado di marcare l’implementazione di IMessenger con l’attributo ExportService, una soluzione è di creare una nostra implementazione di IComposer e creare un ExportProvider che quando “vede” che MEF sta richiedendo l’implementazione di IMessenger la restituisca.

Partiamo col vedere la classe CustomComposer che implementa IComposer. Il metodo GetCustomExportProviders ritornerà una lista contenente i nostri ExportProvider; InitializeContainer ci consente di specificare il catalog utilizzato per la composition.

image

Il metodo GetCatalog andrà a creare un AggregateCatalog a cui verranno aggiunti i Catalog che servono a MEF per trovare i vari pezzi. In questo caso aggiungiamo l’Assembly contente MEFed (questo ci potrebbe servire nel caso volessimo usare i servizi offerti, es. IVisualStateManager, IContainerStatus, …) e un DirectoryCatalog per caricare le varie dipendenze, come ad esempio MEFedMVVM.Demo.ViewModels, MEFedMVVM.Demo.Services e MEFedMVVM.Demo.Interfaces, dalla cartella Extensions.

CustomExportProvider si occuperà di soddisfare la dipendenza verso IMessenger, per cui quando viene richiesto un Import dove il ContractName è uguale al FullName del type IMessenger creiamo un Export e lo aggiungiamo alla lista degli Export che verrà ritornata.

image

Bene ora non ci rimane che dire al LocatorBootstrapper di utilizzare il nostro Composer

image

I sorgenti li potete scaricare da qui Sorriso

Caricare assembly non referenziati con MEFedMVVM

Supponiamo che…

State sviluppando un’applicazione Desktop con WPF.
State utilizzando il pattern MVVM.
State usando MEFedMVVM (e se non lo state facendo dateci un occhio) per associare i ViewModel alle View e per disaccoppiare (in maniera semplice e veloce) i contratti dei vostri servizi dalle implementazioni.

Quest’ultime stanno su un progetto che non referenziate, e che non volete referenziare, da nessuna parte…quindi MEFedMVVM non è assolutamente in grado di soddisfare la richiesta dell’implementazione di uno di questi servizi.

Come risolviamo questo problema?
Dando un occhio ai sorgenti di MEFedMVVM, si scopre che lui tenta di caricare tutto quello che trova nella cartella Extensions (ovviamente se esiste), posta all’interno della BaseDirectory dell’AppDomain corrente. Per cui possiamo creare questa directory e “ficcarci” dentro il nostro assembly contenente i servizi…ed il gioco è fatto Sorriso

Failed to complete setup of assembly (hr = 0x8007000b). Probing Terminated

Qualche giorno fa stavo letteralmente giocando con le proprietà di alcuni progetti e, ad un certo punto, mi è spuntata un’exception di questo genere…

image

Molto probabilmente la prima cosa che pensate appena vi trovate davanti sta roba (senza aver toccato una riga di codice) è: “Fantastico! Che caz… ho fatto?” Googlando un pò si trova velocemente la soluzione.. http://www.williamwishart.co.uk/post/2009/01/26/Failed-to-complete-setup-of-assembly-%28hr-3d-0x8007000b%29.aspx

Ed infatti quello che avevo fatto io era stato proprio cambiare il Platform Target su un progetto (settandolo a Any CPU) che referenziava un altro progetto, e su quest’ultimo lasciarlo a x86…

Teched, WP7 e Silverlight

Quest’anno ho partecipato al Tech-ed come MSP (Microsoft Student Partner) e devo veramente ringraziare Microsoft e Academic Club per la fantastica opporimagetunità! Devo dire che è stata veramente una bellissima esperienza in quanto mi ha consentito di conoscere un sacco di persone appassionate come me di tecnologia, ma anche di ritrovarne altre imageche già conoscevo! Per problemi vari non sono riuscito a seguire molte sessioni, anzi pochissime, però, fortunatamente, sono disponibili online Sorriso

Tornato dal Tech-ed (venerdì pomeriggi) ho trovato sopra la scrivania il mio WP7 (LG Optimus 7) ordinato una settimana prima dal sito della vodafone!

Purtroppo le foto non sono il massimo, in quanto la voglia di provarlo era troppa ed ho fatto tutto di fretta Con la lingua fuori

Inoltre, sempre lo stesso giorno, mi è arrivato anche il libro Silverlight 4 Unleashed e devo dire che cade proprio a pennello visto che in azienda abbiamo iniziato ad usarlo da qualche giorno!

Che dire, ora ho anch’io il mio WP7 e posso provare le applicazioncine che finora vedevo “andare” sull’emulatore!
Ancora grazie a Microsoft e Academic Club! Sorriso

Problema con i References…e .NET Framework 4 Client Profile

Lavorando ad un piccolo progetto di test mi son trovato di fronte (per l’ennesima volta) ad un problema di cui mi dimentico sempre la soluzione…

Allora, nel progetto di test aggiungo dei references a dei progetti che hanno come target framework .NET Framework 4.

image

Compilo e Visual Studio mi da una lista di errori dicendo che non trova l’assembly e le varie classi/interfacce utilizzate…

image

image

Dove sta il problema? Quando crei un nuovo progetto con Visual Studio il target framework di default è .NET Framework 4 Client Profile!
Non è possibile referenziare un progetto/libreria che ha un target framework diverso da quello del progetto dove viene referenziato.

Ulteriori informazioni le trovate qui.
Grazie a Michele per avermi ricordato la soluzione!