C#

WPF in salsa MVVM e i template

Uno degli aspetti di WPF che più mi piace sono i template. Qui si trova una panoramica su ciò che si può fare. I DataTemplate sono molto comodi quando usiamo MVVM; a parer mio, sono la risposta alla domanda: "Bene ora ho il ViewModel e la View. Come li relaziono tra loro?". Come funzionano? Tramite i DataTemplate puoi creare una associazione tra uno specifico tipo di dato ed un template che lo rappresenta. Facciamo qualche esempio: supponiamo di avere un ViewModel di tipo CustomerViewModel e di volerlo associare alla sua View, uno UserControl chiamato CustomerDetailView; potremmo scrivere qualcosa...

XmlSerializer e serializzazione personalizzata

Personalizzare l'XML prodotto dalla serializzazione di una classe con XmlSerialization è motlo semplice; è sufficiente infatti far implementare alle classi coinvolte nella serializzazione l'interfaccia IXmlSerializer. Voglio mostrarvi un esempio: ho avuto la necessità di serializzare una classe che conteneva alcune liste di altre classi; il documento prodotto non doveva raggruppare le varie liste in nodi che rappresentavano le proprietà, ma elencare tutte le istanze sotto il nodo radice. La classi di esempio: public class InterfaceIn : IXmlSerializable { public List<Field>...

Aprire un file col programma predefinito

Ecco un piccolo tip per aprire un file in c#, in modo del tutto analogo alla cara vecchia ShellExecute System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = path; proc.StartInfo.UseShellExecute = true; proc.Start(); Non so se sia l'unico modo; sicuramente è un modo semplice ed efficace   Matteo   Technorati Tag: ShellExecute

SqlServer Compact 32 bit in ambiente a 64 bit

Se vi capita di usare Visual Studio 2008 su una macchina con, ad esempio, un Windows Vista a 64 bit per creare una applicazione con SqlServer Compact a 32 bit, potreste imbattervi in un errore col seguente messaggio: ...Could not load file or assembly or one of its dependencies. An attempt was made to load a program with an incorrect format... A me è successo e ci ho messo un po a capire che era colpa della mia disattenzione. Le soluzioni sono due: la prima è che se...

Routed Event e TreeView

I Routed Event sono stati introdotti con l'avvento di WPF; molto in sintesi, sono eventi che vengono propagati lungo tutto l'albero di controlli della nostra Window, ammettendo quindi gestori multipli: per esempio se abbiamo uno StackPanel con dentro un Button con dentro una Image, l'evento click generato dal click del mouse sulla Image verrà propagato anche al Button e in seguito allo StackPanel. Qui potrete trovare maggiori info. Di seguito invece un piccolo tip per l'uso delle TreeView. Ho implementato un piccolo programmino che prevede la rappresentazione di dati in un albero e la gestione del Drag and Drop....

Program to an Interface, sempre!

Proprio ieri ho avuto una grande conferma di come utilizzare interfacce anzichè classi concrete come dipendenze, paghi e molto! Se poi il tutto è gestito con un framework IoC ancora meglio. Perchè paga? Beh vi racconto una situazione, sicuramente non proprio comune, in cui mi sono trovato. Ultimamente sto seguendo un progetto distribuito su vari stabilimenti dello stesso cliente e per questo motivo è basato su servizi. Oggi il progetto andava in demo presso uno stabilimento, in modo che gli utenti cominciassero a prendere dimistichezza con la UI e validassero i requisiti; purtroppo le macchine virtuali di test...

Deploy del Framework .NET 3.5 SP1 - Part II

Mi rifaccio al post precedente per una importante aggiunta Se dopo aver pubblicato l'applicazione, eseguendo l'installer da remoto, il download dei file dovesse interrompersi col seguente errore: Downloading failed with HRESULT=-2146697210 dovete controllare che il vostro application server (il server su cui l'applicazione è pubblicata) abbia i seguenti MIME impostati .msp --> application/microsoftpatch .msu --> application/microsoftupdate Il mio non li aveva e, aggiungendoli e riavviando il sito web che ospita l'applicazione, il download ha ripreso dal punto in cui si era fermato ;) !   Matteo ...

Deploy del Framework .NET 3.5 SP1

Chi volesse includere nelle applicazioni pubblicate tramite ClickOnce il Framework .NET 3.5 SP1, per renderlo scaricabile direttamente dal sito dell'applicazione, trova a questo link informazioni utili.   Matteo     Technorati Tag: .Net Framework 3.5 SP1,ClickOnce,Deploy

Linq e il metodo Distinct

Ultimamente ho avuto la necessità di estrarre tutti gli elementi distinti di una query Linq. La query in questione interroga un EntitySet e restituisce come risultato una proiezione dei dati di una Entity all'interno di una classe; si presenta all'incirca così: var result = (from c in dataContext.CaratteristicheChimicheSet where codition orderby order descending select new Chemical() { ...

Muovendo i primi passi con Unity

Unity è il framework di IoC messo a disposizione dal team di Microsoft Pattern&Practices; in linea col pattern, unity permette di disaccopiare l'implementazione dal suo contratto, rimuovendo le dipendenze a compile time e risolvendole dinamicamente a run time. Cominciare ad usarlo non è per nulla complesso. Ci sono riuscito pure io ;) Cosa si può fare per cominciare: possiamo definire quali implementazioni concrete utilizzare in risposta alla richiesta di determinate interfacce di queste implementazioni definire il lifecycle tramite dei tipi particolari Vediamo un esempio di file di configurazione che...

TransactionScope ed Entity Framework

Io non so se sia dovuto a delle incompatibilità note, ma non a me :), se sia un problema della mia configuarazione che non riesco a capire, o qualsiasi altra cosa, ma quando uso il TransactionScope con EntityFramework ottengo sempre una eccezione con questo messaggio. System.Data.EntityException: The underlying provider failed on EnlistTransaction La mia configurazione attuale prevede due Windows Server 2003 sp2 uno con l'Application Server e l'altro col DB Sql Server 2005 entrambi col DTC attivato e con privilegi di accesso alla rete. Non ho approfondito ulteriormente la situazione perchè comunque questa...

Deploy di servizi WCF su IIS

Da molte parti per il Web si legge che il deploy di servizi WCF su IIS si riduce ad un copia incolla di alcuni file, più un paio di modifiche banali da apportare al file di configurazione. Per la mia diretta esperienza posso confermare solo in parte: solo in parte perchè un prerequisito forte è che l'ambiente di deploy sia già perfettamente configurato. Cercherò quindi di spiegare passo a passo tutto ciò che ho dovuto fare partendo "dal pulito" per pubblicare i servizi WCF su un Windows Server 2003 (IIS 6), in modo di avere una procedura da seguire...

Entity Framework e lo strano errore

Ho voglia di condividere una esperienza che mi è capitata un paio di settimane fa. Tra le altre cose, in questo periodo mi sto occupando del porting di un progetto Legacy, di cui non verrà conservato nulla se non la base di dati. Visti i tempi molto rilassati abbiamo deciso di usarlo come banco di prova per Entity Framework ed assicuro che è un gran bel banco di prova: la creazione del dominio non si limita ad importare lo schema dal DB che è tutt'altro che semplice e "ben fatto". Arrivo al dunque: inizialmente abbiamo creato l'EDM a...

Windows Forms Localizzate

Localizzare delle windows form probabilmente sarà una prassi nota ai più. In ogni caso mi segno sul blog la serie di semplici step che permettono di creare una applicazione Windows Forms localizzata. Quando si aggiunge una Wondows Form all'applicazione si deve impostare la proprietà Localizable a True. Le caption che vengono impostate sulla Form verranno quindi salvate all'interno del file di risorse di default, con nome NomeForm.resx quindi nel nostro esempio Pippo.resx. Attenzione: questo file di risorse è quello che l'applicazione userà se non troverà il file di lingua specifico; al...

LINQ ti cambia la vita!

Ammetto che mi emoziono per poco, ma... Da quando ho cominciato ad usarlo l'ho sempre pensato; ogni giorno che passa è sempre una nuova conferma; sentire qualcuno di un certo spessore che lo dice in pubblico ti convince sempre di più. Ed oggi, ancora una volta, mi sono emozionato della velocità e l'eleganza con cui LINQ ti risolve i problemi di query, tanto da indurmi a scrivere questo post. Il mio problema era semplice: dato un array contenente degli oggetti dovevo ottenerne un sottoinsieme in base ad una condizione; la condizione consisteva nel verificare se...

Entity SQL e risultati delle query

Sto provando Entity Sql per interrogare il mio dominio con query create dinamicamente e mi sono imbattuto in un problema: vorrei che la query ritornasse un Set di Entity del mio dominio, mentre se eseguo una query in questo modo: query = "select c from GestionaleEntities.Customers as c where (c.CustomerCode = 'C0001')"; this.dataContext.CreateQuery<Customers>(query).ToList(); viene generata una eccezione con questo messaggio: {"Specified cast from a materialized 'System.Data.Objects.MaterializedDataRecord' to 'Techsol.Gestionale.Domain.Customers' is not valid."} dal quale si deduce che il tipo ritornato dalla query, ovvero un generico MaterializedDataRecord, non è proprio il tipo che mi aspettavo ovvero delle istanze delle mie...

"Pubblicare" i membri internal

Un tip vecchio come il cucco, ma visto che mi è servito stamattina dopo un po' di tempo, me lo segno anche sul blog. Per necessità di testing ho dovuto rendere visibili all'assembly contenente i miei test alcuni membri internal definiti in un altro assembly . Con la seguente riga nel file AssemblyInfo dell'assembly contenente i mebri internal è possibile definire quali altri assembly possono accedervi come se fossero public [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAssembly_")] [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("_NomeAltroAssembly_")]   Matteo   Technorati Tag: C#,Internal,Assembly

WCF e DataContract condivisi

Una brevissima introduzione: i contratti di servizi WCF scambiano dati col client tramite classi serializzabili. Gli argomenti e i valori di ritorno dei metodi dei servizi potranno quindi essere dei Value Type oppure delle classi decorate, per esempio, con gli attributi DataContract (classi) e DataMember (proprietà dei DataContract). Supponiamo di aver definito una base di servizi contenente due servizi che usano come DataContract alcune classi definite in un altro assembly che potrebbero essere le Entity di EF piuttosto che dei DTO creati ad hoc. Se aggiungiamo una Service Reference alla nostra applicazione, noteremo che all'interno del codice...

Invocare metodi Generici con reflection

Ho avuto la necessità di invocare tramite reflection un metodo generico. Ho "scoperto" un metodo interessante di MethodInfo che permette di "iniettare" il tipo generico al metodo che si vuole invocare. Supponiamo di voler invocare il metodo MyMethod del tipo myType, usando come tipi per i suoi due parametri generici genericType1 e genericType2; il seguente snippet ci svela come fare a costuire l'istanza corretta di MethodInfo: Type myType = ...; Type genericType1 = ...; Type genericType2 = ...; MethodInfo genericMethodInfo = myType.GetMethod("MyMethod").MakeGenericMethod(genericType1, genericType2); Spero possa tornare utile.   Matteo   Technorati Tag: Reflection,Generics,C#

WCF e Overload dei metodi

Per chi come me è abituato a lavorare col pradigma OOP ed approccia per la prima volta ad una architettura a servizi, nel definire i suoi contratti, se ne avrà necessità, creerà vari Overload dei suoi metodi. Ebbene quando proverà ad esporre il suo servizio con WCF, si ritroverà un errore dovuto al fatto che l'Overload dei metodi non è supportato; questo perchè nel creare il file WSDL per la descrizione del servizio, gli OperationContract vengono identificati col loro nome, impedendo di fatto di avere due operation con lo stesso nome. WCF mette comunque a disposizione un meccanismo per...