.NET
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. ...
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...
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...
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...
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...
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 >>
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...
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
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> ...
Veramente utile!!! :D
http://www.codeproject.com/KB/linq/LINQtoCSV.aspx
Technorati Tag: LINQ,CSV
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...
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...
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...
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...
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...
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},",...
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 :)