DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

.NET

Reactive Extensions (Rx) e Weak events

Come molti sanno, il classico uso degli eventi in C# ha un effetto collaterale: se non viene gestita correttamente la strong reference che si forma tra l’oggetto che espone l’evento (EventSource) e gli oggetti che registrano gli event handlers (EventListeners), si rischia di generare dei memory leak. Infatti, se l’ EventSource ha un ciclo di vita più lungo rispetto agli EventListeners, questi ultimi, se non si deregistrano correttamente dall’evento, vengono tenuti in vita in memoria anche quando non ci sono più riferimenti attivi verso di essi e quindi non vengono reclamati dalla garbage collection fintantoché l’EventSource è attivo. ...

posted @ domenica 25 marzo 2012 17:15 | Feedback (0) | Filed Under [ .NET ]

Spring.NET REST Client

Sono sempre stato un appassionato di soluzioni REST-ful e la nuova versione di Spring.NET REST Client costituisce a mio avviso un ottimo strumento per implementare il client di un qualunque servizio REST in maniera molto semplice e potente, non solo su framework 2.0/3.5/4.0, ma anche su Silverlight 3 e 4, Compact Framework 2.0/3.5 e Windows Phone 7. Queste API client fanno capo ad una classe di riferimento chiamata RestTemplate. Si tratta a tutti gli effetti di un helper che astrae in maniera molto semplice ognuno dei sei principali metodi HTTP che possono essere supportati da un...

posted @ sabato 10 dicembre 2011 23:29 | Feedback (0) | Filed Under [ .NET ]

[AOP] UI e dintorni con PostSharp

L’AOP ormai sta diventando un paradigma di programmazione sempre più diffuso specialmente nel mondo .NET dove strumenti come PostSharp, DotSpect (Compile-time static injection) e Spring.NET, Castle Windsor, Enterprise Library Policy Injection Application Block (Dynamic Proxy) rendono sempre più semplice la gestione dei “cross-cutting concerns” che provengono dal mondo Object-Oriented. Personalmente sono stato sempre un entusiasta di PostSharp e in questo post vorrei citare un paio di aspect che ho sempre valutato positivamente nella gestione di codice “vicino” alla UI, specialmente nel mondo Windows Forms e WPF. Il primo aspect ha a che vedere con il DataBinding. Sappiamo tutti come implementare l’interfaccia INotifyPropertyChanged...

posted @ domenica 16 ottobre 2011 21:29 | Feedback (0) | Filed Under [ .NET WPF ]

[WPF] Drag and Drop con Rx

Le Reactive Extensions (Rx) del framework .NET sono un set di API dedicate a ciò che nella letteratura prende il nome di “reactive programming”. Rx nasce dalla distinzione di due scenari: pull: un programma agisce estraendo dati dall’ambiente in modo interattivo (es. un’iterazione su una sequenza di dati prelevati dall’ambiente). push: un programma reagisce ai dati che l’ambiente “spinge” verso di esso (es. un event-handler è un esempio di reazione in uno scenario push) Data questa distinzione, Rx si basa sulla dualità tra il pattern Iterator e il pattern Observer. In breve, il pattern Observer...

posted @ giovedì 25 agosto 2011 17:27 | Feedback (2) | Filed Under [ .NET WPF ]

System.Collections.Concurrent: via tutti i lock!

Per garantire la thread-safety nell’accesso a collezioni di oggetti in contesti multi-thread, fino ad oggi siamo stati abituati ad utilizzare i più svariati meccanismi di lock, magari prevedendo diversi livelli di granularità. In questo ambito il framework 4.0 fornisce il namespace System.Collections.Concurrent che offre un set di classi thread-safe che si possono usare al posto di quelle di System.Collections e System.Collections.Generic. Anzitutto, salutiamo con una certa soddisfazione la classe ConcurrentDictionary<TKey, TValue>, versione thread-safe della classe Dictionary. Vengono forniti poi tre oggetti che implementano IProducerConsumerCollection<T>, un’interfaccia che definisce due metodi TryAdd e TryTake per scenari...

posted @ domenica 3 luglio 2011 15:31 | Feedback (0) | Filed Under [ .NET ]

Validare documenti XHTML con XmlPreloadedResolver

Una classe molto interessante che ci fornisce il Framework 4.0 è XmlPreloadedResolver. Come si intuisce dal nome, il suo scopo è quello di risolvere risorse pre-caricate che possono essere referenziate da un’istanza XML. Questa funzionalità è veramente comoda quando non è desiderabile creare chiamate di rete per reperire risorse esterne (es. un DTD) o quando si lavora offline, ricevendo evidenti benefici anche sulle performance.     Il plus risiede nel fatto che nell’assembly System.Xml.Utils sono già “embeddati” i DTD relativi allo standard XHTML 1.0 Transitional, Strict e Frameset (incluse le entities speciali), nonché allo standard RSS 0.91... Continua >> 

posted @ mercoledì 20 aprile 2011 21:56 | Filed Under [ .NET ]

Validare documenti XHTML con XmlPreloadedResolver

Una classe molto interessante che ci fornisce il Framework 4.0 è XmlPreloadedResolver. Come si intuisce dal nome, il suo scopo è quello di risolvere risorse pre-caricate che possono essere referenziate da un’istanza XML. Questa funzionalità è veramente comoda quando non è desiderabile creare chiamate di rete per reperire risorse esterne (es. un DTD) o quando si lavora offline, con...

posted @ mercoledì 20 aprile 2011 21:23 | Feedback (1) | Filed Under [ .NET ]

Dictionary persistenti

In questo post ho cercato di riportare la mia esperienza nella modellizzazione di dictionary persistenti in un progetto reale. In particolare, viene descritta una soluzione in cui è stato ritenuto necessario definire un livello di astrazione che permettesse di derivare implementazioni concrete di dictionary persistenti su file system. Leggi il post

posted @ sabato 23 ottobre 2010 01:14 | Filed Under [ .NET ]

Dictionary persistenti

In un mio progetto avevo bisogno di rendere persistenti dei Dictionary al fine di recuperarne lo stato al riavvio dell’applicazione. Poiché avevo bisogno di gestire un livello di astrazione rispetto allo storage utilizzato, ho anzitutto definito una classe astratta PersistentDictionary<TKey,TValue> derivando Dictionary<TKey,TValue> nel seguente modo: public abstract class PersistentDictionary<TKey, TValue> : Dictionary<TKey, TValue> ...

posted @ sabato 23 ottobre 2010 00:37 | Feedback (0) | Filed Under [ .NET ]

LINQ to CSV

Veramente utile!!! :D http://www.codeproject.com/KB/linq/LINQtoCSV.aspx Technorati Tag: LINQ,CSV

posted @ lunedì 27 aprile 2009 17:35 | Feedback (1) | Filed Under [ .NET ]

[Entity Framework] Transazioni custom

L’uso di transazioni nell’ EF alcune volte può richiedere una gestione custom. Sebbene nella maggior parte dei casi è il framework stesso a gestire le transazioni per noi ( es. ogni volta che aggiungiamo/ modifichiamo/eliminiamo un’entity tramite il metodo SaveChanges() ), in alcune situazioni particolari si potrebbe richiedere la gestione dello 'scope' transazionale a mano. Una di queste situazioni si presenta ad esempio quando si lavora con ObjectContext multipli: infatti, in casi di questo tipo si può ricorrere all'utilizzo di un "ambiente" esterno all’EF ( es. System.Transactions ) da cui partire anche per implementare una propria strategia di recovery. Entriamo nel merito: Se invochiamo SaveChanges() o SaveChanges(true), l’EF applica i cambiamenti e scarta...

posted @ giovedì 15 gennaio 2009 11:47 | Feedback (1) | Filed Under [ .NET ]

Tips su XML in .NET

In questo post riporto un paio di tips non molto frequenti ma che possono comunque tornare utili quando si elaborano istanze XML in .NET: 1. Elaborare XML Fragments Alcune volte si ha la necessità di elaborare XML non "fully conformant", ad esempio in assenza di un unico elemento root (in questo caso si parla di "XML fragment"). Nella fattispecie, se un frammento XML di questo tipo <elem1>...</elem1><elem2>...</elem2> venisse impostato come source di un XmlReader o un XmlDocument, otterremmo una bella XmlException "Elementi di primo livello multipli. Riga X, Posizione Y". Un modo corretto per lavorare con XmlFragment è quello di utilizzare la classe...

posted @ lunedì 15 settembre 2008 10:13 | Feedback (0) | Filed Under [ .NET ]

Visual LINQ Query Builder

Visual LINQ Query Builder è un interessante tool che, oltre a costituire un potente designer per costruire query LINQ to SQL, mostra anche come creare un Add-in di Visual Studio 2008 utilizzando WPF. Visual LINQ Query Builder is an add-in to Visual Studio 2008 Designer that helps you visually build LINQ to SQL queries. Functionally it provides the same experience as, for instance the Microsoft Access Query Builder, but in the LINQ domain. The entire UI of this add-in uses Windows Presentation Foundation. The goal of this tool is to help users become more familiar with the LINQ syntax. P.S.: disponibile...

posted @ mercoledì 2 aprile 2008 15:34 | Feedback (2) | Filed Under [ .NET ]

LINQ to XML: "Halloween Problem"

Oggi, mentre mi stavo documentando su "LINQ to XML" (o XLINQ come preferite), mi sono imbattuto nel cosiddetto "Halloween Problem", un problema noto specialmente ai programmatori di database che, all'interno di una tabella, devono gestire il cambiamento della locazione fisica di un record a seguito di un UPDATE. Tale cambiamento infatti può generare talvolta una situazione di inconsistenza (e non di errore!!!) nel momento in cui lo stesso record viene rielaborato più volte all'interno del contesto di esecuzione di una singola operazione logica.Ebbene, in "LINQ to XML" lo scenario da evitare è pressoché simile e si rileva spesso e volentieri nelle iterazioni. Tutto nasce dal fatto che le iterazioni sulle collection tramite LINQ caratterizzano in effetti codice dichiarativo, in grado cioé di descrivere...

posted @ lunedì 6 agosto 2007 15:05 | Feedback (0) | Filed Under [ .NET ]

SSIS: Impostare una Custom Property di un Data Flow Component

Oggi mi sono imbattuto nella necessità di impostare la Custom Property OpenRowset di un Data Flow Component (un OLE DB Source per la precisione) all'interno di un Data Flow Task. Combinando Google, MSDN, intuito e designer di Visual Studio :), sono riuscito nel mio intento tramite il seguente codice: using Microsoft.SqlServer.Dts.Runtime; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; // Classi e interfacce per creare Data Flow Components ed automatizzare Data Flow Tasks ... TaskHost MyTaskHost = (TaskHost)package.Executables[0]; // Attenzione all'ordinale ;) // MainPipe: wrapper per configurare un Data Flow Task programmaticamente MainPipe dataFlowTask = MyTaskHost.InnerObject as MainPipe; // Ciascun componente del Data Flow Task è rappresentato da un ComponentMetadata IDTSComponentMetaData90 MyComponentMetadata = dataFlowTask.ComponentMetaDataCollection["MyComponentName"]; // Accesso alla Custom Property...

posted @ venerdì 27 luglio 2007 01:01 | Feedback (0) | Filed Under [ .NET SQL Server ]

Accedere alle Email di Outlook 2007 via MAPI

Riporto un utile esempio di codice C# per accedere in lettura alle email contenute nella cartella "posta in arrivo" di Outlook 2007 via MAPI. L'unico requisito è chiaramente la la referenza alla dll Microsoft Outlook 12.0 Object Library.  using Microsoft.Office.Interop.Outlook; ... Application app = new Microsoft.Office.Interop.Outlook.ApplicationClass(); _NameSpace ns = app.GetNamespace("MAPI"); ns.Logon(null, null, false, false); // Cartella di default: "Posta in arrivo" MAPIFolder IncomingFolder = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); MailItem item = null; for (int i = 1; i <= IncomingFolder.Items.Count; i++) { item = (MailItem)subFolder.Items[i]; Console.WriteLine("Subject: {0},",...

posted @ venerdì 20 luglio 2007 00:25 | Feedback (0) | Filed Under [ .NET ]

Alcune risorse per LINQ

Per chi non ha molta familiarità con LINQ (”Language Integrated Query”), segnalo questo interessantissimo link (C#): 101 LINQ Samples (notare 101...che simpatia!!!). Come spesso accade, il modo migliore per apprendere una tecnologia è partire dagli esempi :)

posted @ lunedì 23 aprile 2007 23:42 | Feedback (0) | Filed Under [ .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET