<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog di Emilio Reale</title>
	<atom:link href="http://emiliostefano.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://emiliostefano.wordpress.com</link>
	<description>Unpo&#039; di tecnologia e curiosità</description>
	<lastBuildDate>Sun, 22 Jan 2012 03:48:59 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='emiliostefano.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/941be91fe688de4af12c92fc13fcd3af?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Blog di Emilio Reale</title>
		<link>http://emiliostefano.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://emiliostefano.wordpress.com/osd.xml" title="Blog di Emilio Reale" />
	<atom:link rel='hub' href='http://emiliostefano.wordpress.com/?pushpress=hub'/>
		<item>
		<title>DeepZoom = MultiscaleImage</title>
		<link>http://emiliostefano.wordpress.com/2010/02/10/deepzoom-multiscaleimage/</link>
		<comments>http://emiliostefano.wordpress.com/2010/02/10/deepzoom-multiscaleimage/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 14:11:15 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2010/02/10/deepzoom-multiscaleimage/</guid>
		<description><![CDATA[Silverlight dalla versione 3 ha introdotto la teconologia DeepZoom, che, permette du creare effetti davvero spettacolari ricalcolando dinamicamente la dimensione delle immagini in modo tale da poter effettuare la giusta risoluzione delle immagini per diversi livelli di dettaglio. DeepZoom viene creato mediante il tool gratuito DeepZoom Composer&#160; La prima cosa che dobbiamo fare in un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=194&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Silverlight dalla versione 3 ha introdotto la teconologia DeepZoom, che, permette du creare effetti davvero spettacolari ricalcolando dinamicamente la dimensione delle immagini in modo tale da poter effettuare la giusta risoluzione delle immagini per diversi livelli di dettaglio.</p>
<p>DeepZoom viene creato mediante il tool gratuito <a href="http://go.microsoft.com/fwlink/?LinkId=116569">DeepZoom Composer</a>&#160; </p>
<p>La prima cosa che dobbiamo fare in un progetto silverlight che deve utilizzare la customizzazione di un oggetto DZ è quella di inserire il tag</p>
<p>&lt;MultiScaleImage x:Name=”myDzObj” Source&quot;=”dzOutput.xml” /&gt;</p>
<p>Tale output è ottenuto mediante il composer di DeepZoom a questo punto possiamo facilmente aggiungere un po ‘ di interativià agendo sugli eventi, quindi per esempio aggiungiamo MouseEnter e MouseLeave</p>
<p>&lt;MultiScaleImage x:Name=”myDzObj” Source&quot;=”dzOutput.xml” MouseEnter=&quot;DeepZoomObject_MouseEnter&quot; MouseLeave=&quot;DeepZoomObject_MouseLeave&quot;/&gt;</p>
<p>Nel code behind possimo facilmente andare a gestire i due eventi </p>
<p>myDzObj.ZoomAboutLogicalPoint(3, .5, .5);</p>
<p>myDzObj.ZoomAboutLogicalPoint(.3, .5, .5);</p>
<p>in tal modo eseguendo il run possiamo vedere che l’immagine ingrandisce e rimpicciolisce con l’hover del mouse.</p>
<p>Attualmente mi sarebbe piaciuto incorporare le funzionalità DZ in un applicazione WPF ma non sono suportate e quindi è necessario incorpoare Silverlight nella mia applicazione WPF, speriamo che in futuro sia disponibile direttamente questa feature.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/194/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=194&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2010/02/10/deepzoom-multiscaleimage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>La partecipazione dei nostri oggetti ad attivit&#224; transazionali</title>
		<link>http://emiliostefano.wordpress.com/2010/02/08/la-partecipazione-dei-nostri-oggetti-ad-attivit-transazionali/</link>
		<comments>http://emiliostefano.wordpress.com/2010/02/08/la-partecipazione-dei-nostri-oggetti-ad-attivit-transazionali/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 02:30:55 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Architetture]]></category>
		<category><![CDATA[Framework .NET]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2010/02/08/la-partecipazione-dei-nostri-oggetti-ad-attivit-transazionali/</guid>
		<description><![CDATA[Da sempre siamo abituati a utilizzare le transazioni per la memorizzazione delle informazioni su base dati in modo tale da impedire un salvataggio su particolari dipendenze in attività di registrazione complesse, ebbene, talvolta si dimenticano i principi base che devono regolamentare le attività transazionali. Innanzitutto farei un cappello introduttivo per sottolineare che le operazioni su [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=193&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Da sempre siamo abituati a utilizzare le transazioni per la memorizzazione delle informazioni su base dati in modo tale da impedire un salvataggio su particolari dipendenze in attività di registrazione complesse, ebbene, talvolta si dimenticano i principi base che devono regolamentare le attività transazionali.</p>
<p>Innanzitutto farei un cappello introduttivo per sottolineare che le operazioni su database sono solo un caso specifico di transazionalità, e, sebbene di laraga diffusione, possiamo definire un’attività transazionale qualsiasi attività che esegue un operazione di persistenza, persistenza che sia secondo il paradigma ACID ovvero:</p>
<p>Atomica</p>
<p>Consistente</p>
<p>Isolata</p>
<p>Durevole</p>
<ul>
<li>Atomica significa che <u>tutte le operazioni appartenente al contesto transazionale devono essere considerate come un unica operazione.</u></li>
<li>Consistente significa<u> che prima e dopo l’operazione transazionale non siano violate le regole di integrità</u></li>
<li>Isolata significa che <u>le attività coninvolte al contestono non abbiano impatti reali fino alla loro conclusione</u></li>
<li>Durevole sitgnifica che <u>i dati siano memorizzati in forma durevole (quindi salvati da qualche parte)</u></li>
</ul>
<p>L’oggetto che il framework ci fornisce per supportare questo principo è il conosciutissimo TransactionScope che nel caso più semplice è scritto così:</p>
<p>using (TransactionScope ts = new TransactionScope()) {    <br />….    <br />ts.Complete();    <br />}</p>
<p>Inutile dire che la <em>using </em>è una convenzione per la disposizione dell’oggetto TransactionScope al termine della sua reale necessità. Segnalo inoltre che anche se la forma più comune di utilizzo delle TransactionScope sia quella sopra cita è bene tenere a mente che abbiamo a disposizione una gestione più capillare mediante la semplice costruzione dell’oggetto TransactionScope </p>
<ul>
<li>TransactionScopeOption.Required (default) – la transazione viene creata solo se occorre</li>
<li>TransactionScopeOption.RequiredNew – la transazione viene creata comunque</li>
<li>TransactionScopeOption.Suppress – elimina il blocco corrente al blocco transazionale precedente</li>
</ul>
<p>I parametri sopra elencati sono necessari qualora abbiamo una complessità tale da dover gestire operazioni transazionali nidificate, e, in tal caso desideriamo gestire il singolo blocco in modo programmatico, ovvero nel caso di RequiredNew obblighiamo l’autonomia del blocco transazionale indipendemente dal precedente e, nel caso di Suppress, obblighiamo che indipendentemente dalla nidificazione il blocco transazionale sia eseguito “al di fuori”.</p>
<p>Preciso che ad oggi qualsiasi attività transazionale viene gestita tramite l’oggetto Distributed Transaction Coordinator introdotto da Windows NT e talvolta in produzione dobbiamo preoccuparci che il serivizio sia correttamente avviato (Da SqlServer 2005 sono state introdotte le lightweight transaction che consentono un considerevole incremento di performance rispetto a MSDTC).</p>
<p>In questo articolo analizziamo comunque tutte le attività transazionali che non hanno necessariamente a che fare con la DbCommand e quindi con ADO.NET ma che abbiano invece una responsabilità differente, ipotizziamo ad esempio il salvataggio su un file che prima scrivere fisicamente il file vogliamo che le informazioni siano in un file tempomporaneo e vogliamo consentire la particpazione del nostro oggetto transazionale a un contesto più ampio, e nel caso specifico faccio riferimento al pattern architetturale Unit Of Work che ci consente di tenere traccia dei cambiamenti fino a un livello da noi definito.</p>
<p>Bene, veniamo alla seconda parte dell’articolo per vedere come far partecipare un nostro oggetto custom al contesto di un TransactionScope. La parte del leone la fa il transaction Manager che internamente è l’oggetto che fisicamente si preoccupa di invocare la Commit (nel caso sia andato tutto bene – metodo Complete, oppure la rollback – disposizione del transaction scope).</p>
<p>Il transaction manager, invoca un oggetto che implementi l’interfaccia IEnlistmentNotification la quale consente di tenere traccia di uno stato ed eseguire la commit solo all’occorrenza, quindi, qualsiasi oggetto che implementa la IEnlistmentNotification è in grado di partecipare ad un particolare contesto transazionale, e, nel caso di Ado.Net Microsoft lo ha implementato al posto nostro, tale funzionalita aimè non è presente nelle operazioni che abbiano però un ambito applicativo differente dai database e quindi per tutte le operazioni che richiedano una gestione particolare.</p>
<p>Ipotizziamo un proxy wcf che vogliamo che effettivamente invochi l’operazione a effettivo termine di tutte le attività dipendenti e che non siano da lui consciute ma dal programma; in questo caso sfrutteremo le partial class per estendere il nostro proxy e implementare dunque la IEnlistmentNotification.</p>
<p>Tutto sommato la realizzazione di un oggetto transazionabile è oltremodo semplce e qui c’è la definizione dei metodi da implementare:</p>
<p>public interface IEnlistmentNotification   <br />{    <br />void Commit( Enlistment enlistment );    <br />void InDoubt( Enlistment enlistment );    <br />void Prepare( PreparingEnlistment preparingEnlistment );    <br />void Rollback( Enlistment enlistment );    <br />}</p>
<p>Il metodo commit e rollback sono i metodi che verranno richiamati al termine dell’operazione per la persistenza o il rollback mentre una nota speciale vanno per i due metodi Prepare e InDubt che sono coinvolti a quel tipo di transazioni che avvengono in due fasi, mentre InDubt viene eseguito quando tutto sembra essere ok ma qualche Prepare della catena di oggetti ha perso la sua consistenza e quindi sarà nostra premura organizzarci di conseguenza.</p>
<p>Bene, è tutto e rimando alla documentazione ufficiale di MSDN o al più all’uso di reflector per gli esempi anche perchè wordpress in cui ospito il blog non è il massimo per eseguire il post di codice, ma mi organizzerò prima o poi.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/193/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=193&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2010/02/08/la-partecipazione-dei-nostri-oggetti-ad-attivit-transazionali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>WCF e IIS, non solo Http</title>
		<link>http://emiliostefano.wordpress.com/2010/01/30/wcf-e-iis-non-solo-http/</link>
		<comments>http://emiliostefano.wordpress.com/2010/01/30/wcf-e-iis-non-solo-http/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 22:41:51 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2010/01/30/wcf-e-iis-non-solo-http/</guid>
		<description><![CDATA[WCF, è un framework molto potente ed è ad oggi lo standard de facto per i servizi di comunicazione in ambiente .NET, dalla versione 3 con Visual Studio 2005 Microsoft ha messo a disposizone la possibilità di far ospitare i nostri servizi un application server di tutto rispetto come IIS, ma come fare per quei [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=188&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>WCF, è un framework molto potente ed è ad oggi lo standard de facto per i servizi di comunicazione in ambiente .NET, dalla versione 3 con Visual Studio 2005 Microsoft ha messo a disposizone la possibilità di far ospitare i nostri servizi un application server di tutto rispetto come IIS, ma come fare per quei servizi non trasportato sotto http? </p>
<p>La risposta si chiama WAS o meglio Windows Actiovation Services, cioè un estensione di IIS non installata di default che consnte il trasporto sotto tutti i protocolli disponibili con wcf e con qualche accorgimento anche ai canali “custom”.</p>
<p>Per chi volesse provare questa feature, consiglio l’installazione di windows 7 per un ambiente di sviluppo oppure windows server 2008 R2 per un ambiente di test e produzione. Diciamo comunque che giocheremo con un paio di comandi&#160; che i nostri colleghi sistemisti conoscono o dovrebbero conoscere bene.</p>
<p>Per prima cosa l’installazione dei servizi WAS avviene tramite il pannello di controllo e l’aggiunta di funzionalità Windows, nella mia versione in inglese si chiama Windows Communication Foundation Non Http Activation, e la loro installazione è banale alla pari di un’installazione di IIS 7.</p>
<p>Ora dobbiamo aprire la command line ( chi non ha disabilitalo la UAC deve avere concedere i privilegi amministrativi, con il comando run as administratori).</p>
<p>A questo punto è possibile assegnare i vari binding utilizzabili da IIS</p>
<p>%windir%\System32\inetsrv\appcmd.exe set site “Default Web Site” &#8212; +bindings.[protocol=’net.pipe’, bindinginformation=*’]</p>
<p>ora ogni applicazione di IIS che lo ospitera i nostri servi non http dovrà avere il suo mapping WAS cioè</p>
<p>%windir%\system32\inetsrv\appcmd set app “Default Web Site/MyApplication” /enabledProtocols:http,net.pipe</p>
<p>e con questo abbiamo finito! Naturalmente è possibile eseguire questa procedura con qualsiasi protocollo di WCF.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=188&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2010/01/30/wcf-e-iis-non-solo-http/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>Windows 7 Ultimate e Windows 7 Ultimate N</title>
		<link>http://emiliostefano.wordpress.com/2010/01/30/windows-7-ultimate-e-windows-7-ultimate-n/</link>
		<comments>http://emiliostefano.wordpress.com/2010/01/30/windows-7-ultimate-e-windows-7-ultimate-n/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:34:56 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2010/01/30/windows-7-ultimate-e-windows-7-ultimate-n/</guid>
		<description><![CDATA[La versione di Windows 7 Ultimate è quella più completa, si possono aggiornare le interfacce in 35 lingue (evidentemente anche a Redmond hanno saputo che in Italia abbiamo un sacco di arabi e cinesi) ma attenzione, molto spesso ho visto nei negozi la versione N di Windows 7 Ultimate, e udite utite, ecco la gabola, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=187&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="embedObject" title="Windows&#160;7 Ultimate N" alt="Windows&#160;7 Ultimate N" src="http://res1.windows.microsoft.com/resbox/en/Windows%207/Main/1/b/1b02de18-2298-4e9d-bb89-19cdfe484bb3/1b02de18-2298-4e9d-bb89-19cdfe484bb3.jpg" width="100" height="100" /></p>
<p>La versione di Windows 7 Ultimate è quella più completa, si possono aggiornare le interfacce in 35 lingue (evidentemente anche a Redmond hanno saputo che in Italia abbiamo un sacco di arabi e cinesi) ma attenzione, molto spesso ho visto nei negozi la versione N di Windows 7 Ultimate, e udite utite, ecco la gabola, un utente si aspetta di avere le funzionalità multimediali e tutte le feature strabilianti incluse nella nuova versione dell’ultimo sistema uscito da Microsoft, ebbene nonostante il costo (che non è proprio a buon mercato) la versione N di Windows non possiede le funzionalità multimediali. Ecco dunque le scuse di Microsoft a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=31017ed3-166a-4c75-b90c-a6cef9b414c4&amp;displaylang=it">questo indirizzo</a> tutte le feature mancanti.</p>
<p>Ora mi permetto anche un commento personale, possibile che a nessuno di Microsoft sia venuto in mente che a un cliente che ha appena installato la versione N gli venga un coccolone al termine dell’installazione?</p>
<p>Purtroppo in rete non esistono molte informazioni a riguardo quindi fate bene attenzione se non avete la banda larga (mi immagino il paesino di montagna) e non avete voglia di scaricare 250 mega di features.</p>
<p> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/187/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=187&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2010/01/30/windows-7-ultimate-e-windows-7-ultimate-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>

		<media:content url="http://res1.windows.microsoft.com/resbox/en/Windows%207/Main/1/b/1b02de18-2298-4e9d-bb89-19cdfe484bb3/1b02de18-2298-4e9d-bb89-19cdfe484bb3.jpg" medium="image">
			<media:title type="html">Windows&#160;7 Ultimate N</media:title>
		</media:content>
	</item>
		<item>
		<title>Come utilizzare SSL su IIS 7.5</title>
		<link>http://emiliostefano.wordpress.com/2010/01/29/come-utilizzare-ssl-su-iis-7-5/</link>
		<comments>http://emiliostefano.wordpress.com/2010/01/29/come-utilizzare-ssl-su-iis-7-5/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 21:46:00 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2010/01/29/come-utilizzare-ssl-su-iis-7-5/</guid>
		<description><![CDATA[Come tutti sappiamo le connessioni https ovvero con certificati SSL sono sempre lente è quindi opportuno circoscrivere la protezione PGP solo sulle parti realmente sensibili, come l’autenticazione cardspace, l’invio di una password o l’effettiva parte transazionale come l’invio delle informazioni sensibili. A questo proposio ricordo che esiste una normativa ben precisa per la memorizzazione di [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=186&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Come tutti sappiamo le connessioni https ovvero con certificati SSL sono sempre lente è quindi opportuno circoscrivere la protezione PGP solo sulle parti realmente sensibili, come l’autenticazione cardspace, l’invio di una password o l’effettiva parte transazionale come l’invio delle informazioni sensibili. A questo proposio ricordo che esiste una normativa ben precisa per la memorizzazione di informazioni sensibili sui propri utenti, e tale normativa, essenzialmente obbliga lo sviluppo di una parte che autorizza espressamente la memorizzazione e l’uso dei dati forniti e l’hash delle password, per quest’ultimo compito asp.net con il proprio provider model fornisce diversi algoritmi di hash che possono essere configurati via web.config.</p>
<p>Torniamo dunque alla spiegazione dell’impostazione SSL su IIS 7. La versione di Windows che uso io è in inglese per tradizione . </p>
<ol>
<li><strong>Creare un nuovo sito&#160; <br /></strong><a href="http://emiliostefano.files.wordpress.com/2010/01/image.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb.png?w=244&#038;h=237" width="244" height="237" /></a> </li>
<li><strong>Creare un certificato di test oppure importare un certificato regolarmente autorizzato.        <br /></strong><a href="http://emiliostefano.files.wordpress.com/2010/01/image1.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb1.png?w=244&#038;h=176" width="244" height="176" /></a>       <br />Fare doppio click sull’icona di creazione di un nuovo certificato      <br /><a href="http://emiliostefano.files.wordpress.com/2010/01/image2.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb2.png?w=244&#038;h=176" width="244" height="176" /></a>&#160; <br />Premere il link di creazione di un certificato con firma autogenerata       <br /><a href="http://emiliostefano.files.wordpress.com/2010/01/image3.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb3.png?w=244&#038;h=186" width="244" height="186" /></a>       <br />inserire un nome che distingua il nostro certificato e premere ok      <br /><a href="http://emiliostefano.files.wordpress.com/2010/01/image4.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb4.png?w=244&#038;h=176" width="244" height="176" /></a>       <br />Nell’elenco dei certificati compare il nostro nuovo certificato</li>
<li><strong>Abilitare il binding Https        <br /></strong><a href="http://emiliostefano.files.wordpress.com/2010/01/image5.png"><strong><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb5.png?w=244&#038;h=176" width="244" height="176" /></strong></a><strong>        <br /></strong><a href="http://emiliostefano.files.wordpress.com/2010/01/image6.png"><strong><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb6.png?w=244&#038;h=116" width="244" height="116" /></strong></a><strong>        <br /></strong>Selezionare il pulsante Add      <br /><a href="http://emiliostefano.files.wordpress.com/2010/01/image7.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="image" border="0" alt="image" src="http://emiliostefano.files.wordpress.com/2010/01/image_thumb7.png?w=244&#038;h=135" width="244" height="135" /></a>       <br />Aggiungere dunque il protocollo https e selezionare il certificato che abbiamo creato</li>
</ol>
<p>Questa è tutta la procedura necessaria per aver avviato ill supporto http al nostro sito, naturalmente in fase di navigazione avendo creato un certificato di test è necessario autorizzare la navigazione con un certificato di fonte anonima.</p>
<p>Et voilà ora è possibile interagire sulla porta 443 in SSL.</p>
<p>naturalmente è possibile anche utilizzare la vecchia utility makecert.exe eseguibuike dal prompt dei comandi di Visual Studio.</p>
<p>Inutile dire che ogni applicazione ASP.NET che si rispetti, sia anche con MVC necessiti del proprio application pool, in modo da non interferire nei processi di altri siti esistenti.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=186&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2010/01/29/come-utilizzare-ssl-su-iis-7-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2010/01/image_thumb7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Office 2010</title>
		<link>http://emiliostefano.wordpress.com/2009/11/04/office-2010/</link>
		<comments>http://emiliostefano.wordpress.com/2009/11/04/office-2010/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 03:05:10 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Curiosità]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2009/11/04/office-2010/</guid>
		<description><![CDATA[Ho provato stasera la technical preview di Office 2010 e sono devvero stupito per la quantità di cose che in Microsoft hanno aggiunto. Ciò che mi è piaciuto è che ho voluto iniziare l&#8217;installazione alla grande facendo un update da Office 2007 e come per magia l&#8217;installazione è andata importando tutto quello che già avevo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=167&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ho provato stasera la technical preview di Office 2010 e sono devvero stupito per la quantità di cose che in Microsoft hanno aggiunto. Ciò che mi è piaciuto è che ho voluto iniziare l&#8217;installazione alla grande facendo un update da Office 2007 e come per magia l&#8217;installazione è andata importando tutto quello che già avevo a buon fine ma ho dovuto rimuovere i Pin dalla taskbar di windows 7 in quanto i collegamenti sono cambiati.</p>
<p>Sono stato impressionato da Outlook 2010 che ha un interfaccia devvero divertentente mi propongo dunque di pubblicare un video con una anteprima</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=167&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2009/11/04/office-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title></title>
		<link>http://emiliostefano.wordpress.com/2009/11/03/166/</link>
		<comments>http://emiliostefano.wordpress.com/2009/11/03/166/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 10:04:03 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Curiosità]]></category>
		<category><![CDATA[Unity per Silverlight]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2009/11/03/166/</guid>
		<description><![CDATA[Perchè è stato fatto un progetto apposito di unity per silverlight? La risposta è semplicissima non esiste il supporto a System.Configuration quindi voilà il team di P&#38;P ha confezionato una versione di unity in un unico assembly che con un unica referenza possiamo configurare la nostra dependency injection per MVVM.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=166&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Perchè è stato fatto un progetto apposito di unity per silverlight? La risposta è semplicissima non esiste il supporto a System.Configuration quindi voilà il team di P&amp;P ha confezionato una versione di unity in un unico assembly che con un unica referenza possiamo configurare la nostra dependency injection per MVVM.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/166/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=166&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2009/11/03/166/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>Il futuro dell&#8217;AOP</title>
		<link>http://emiliostefano.wordpress.com/2009/11/03/il-futuro-dellaop/</link>
		<comments>http://emiliostefano.wordpress.com/2009/11/03/il-futuro-dellaop/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 09:24:59 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Aspect]]></category>
		<category><![CDATA[Enterprise Library]]></category>
		<category><![CDATA[IoC]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2009/11/03/il-futuro-dellaop/</guid>
		<description><![CDATA[L&#8217;inversion of Control è gettonata da un paio d&#8217;anni e si vedono in produzione sistemi che usano estensivamente questo tipo di pattern, analogamente, però l&#8217;interception con Unity fa la sua sporca figura perchè è possibile con pochissime linee di codice wrappare completamente il policy application block e definire i CallHandler (ICallHandler) e impostare le posi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=165&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>L&#8217;inversion of Control è gettonata da un paio d&#8217;anni e si vedono in produzione sistemi che usano estensivamente questo tipo di pattern, analogamente, però l&#8217;interception con Unity fa la sua sporca figura perchè è possibile con pochissime linee di codice wrappare completamente il policy application block e definire i CallHandler (ICallHandler) e impostare le posi di interception mediante attributi.</p>
<p>Ormai ci siamo i paradigmi stanno cambiando velocemente e con EL 5 le novità non mancano e probabilmente sarà anche da valutare l&#8217;ipotesi di adottare nuovi approcci architetturali il futuro è alle porte e su codeplex già esiste un progetto fantastico il Common Service Locator</p>
<p><a href="http://www.codeplex.com/CommonServiceLocator">http://www.codeplex.com/CommonServiceLocator</a></p>
<p>Le differenze nel paradigma stanno in questi spezzoni di codice</p>
<p>Oggi:</p>
<p>DatabaseFactory.CreateDatabase(&#8220;mia istanza&#8221;)</p>
<p>oppure</p>
<p>Container.Resolve&lt;Database&gt;(&#8220;mia istanza&#8221;)</p>
<p>Il futuro</p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum1">   1:</span> <span style="color:#0000ff;">new</span> TypeRegistration&lt;Database&gt;(
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum2">   2:</span>     () =&gt; <span style="color:#0000ff;">new</span> SqlDatabase(
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum3">   3:</span>                 ConnectionString,
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum4">   4:</span>                 Container.Resolved&lt;IDataInstrumentationProvider&gt;(Name)))
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum5">   5:</span>     {
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum6">   6:</span>         Name = Name,
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum7">   7:</span>         Lifetime = TypeRegistrationLifetime.Transient
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum8">   8:</span>     };
</pre>
<p>oppure</p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum1">   1:</span> var configurator = <span style="color:#0000ff;">new</span> UnityContainerConfigurator(Container);
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum2">   2:</span>
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum3">   3:</span> EnterpriseLibraryContainer.ConfigureContainer(
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum4">   4:</span>     configurator,
</pre>
<p> <!--CRLF--> </p>
<pre style="text-align:left;line-height:12pt;background-color:white;width:100%;font-family:'Courier New', courier, monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;border-style:none;margin:0;padding:0;">
<span style="color:#606060;" id="lnum5">   5:</span>     configurationSource);
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/165/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/165/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/165/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=165&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2009/11/03/il-futuro-dellaop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>Silverlight 3 altre novità (parte 3 di 6)</title>
		<link>http://emiliostefano.wordpress.com/2009/11/03/silverlight-3-altre-novita-parte-3-di-6/</link>
		<comments>http://emiliostefano.wordpress.com/2009/11/03/silverlight-3-altre-novita-parte-3-di-6/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 08:25:42 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2009/11/03/silverlight-3-altre-novita-parte-3-di-6/</guid>
		<description><![CDATA[Una importante novità è nella versione 3 è la possibilità di fare dialogare diverse istanze del plugin con pochissime linee di codice, e a tale proposito di passare tra &#8220;sender&#8221; e &#8220;receiver&#8221; un semplice messaggio di testo in modo che vi sia uno scambio di messaggi tra istanze di plugin che risiedono nella stessa macchina, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=164&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Una importante novità è nella versione 3 è la possibilità di fare dialogare diverse istanze del plugin  con pochissime linee di codice, e a tale proposito di passare tra &#8220;sender&#8221; e &#8220;receiver&#8221; un semplice messaggio di testo in modo che vi sia uno scambio di messaggi tra istanze di plugin che risiedono nella stessa macchina, cioò di cui stiamo parlando sono le <strong>local connections</strong>.<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ciò che occorre è creare delle istanze di alcuni oggetti e assegnare un nome di tipo stringa alla nostra connessione e utilizzare il namespace System.Windows.Messaging , gli oggetti sono 2<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">LocalMessageReceiver per la parte server<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">LocalMessageSender per la parte client<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Nell&#8217;esempio allegato si potrà vedere come ciò che scriviamo in un textbox è perfettamente visibile in un textblock in una istanza completamente diversa del plugin, vale anche nella modalità out of browser<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Le porzioni di codice sono tutte nel costruttore<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Parte clent<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        private readonly LocalMessageSender _sender;<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public MainPage()<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            InitializeComponent();<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _sender = new LocalMessageSender(&#8220;myreceiver&#8221;);<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            myTextBox.KeyUp += ((sender, args) =&gt;<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                {<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                    _sender.SendAsync(args.Key.ToString());<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                }<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            );<br />
</span></p>
<p>
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Parte server<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _receiver = new LocalMessageReceiver(&#8220;myreceiver&#8221;);<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _receiver.MessageReceived += ((sender, args) =&gt;<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                {<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                    myText.Text += args.Message;<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                }<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            );<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            try<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            {<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                _receiver.Listen();<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            }<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            catch (ListenFailedException exception)<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            {<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                MessageBox.Show(string.Format(&#8220;Il local connection receiver non può essere instanziato\n{0}&#8221;,<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                    exception.Message));<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            }<br />
</span></p>
<p> <br />
 </p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Gli effetti che si possono effettuare sono notevoli con un codice banale. L&#8217;unica menzione è che la spedizione dei messaggi deve essere fatta in modalità asincrona altrimenti impatterebbe sull&#8217;istanza del browser.<br />
</span></p>
<p> <br />
 </p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Vediamo ora le novità per i <strong>DataBinding</strong><br />
		</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Per prima cosa finalmente in Microsoft hanno implementato il supporto per il binding su elementi visuali<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">{Binding ElementName=mioElemento, Path=MiaProprietà} che già usiamo estensivamente in WPF e a cui siamo abbituati in ambito smart client.<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Anche nel caso di Silverlight 3 è stato implementata la possibilità di collegare le fonti dati al CollectionViewSource che equivale al BindingNavigatore nelle applicazioni SmartClient in Windows Form, sacrificando la possibilità di effetuare il grouping. Anche in questo caso il codice è semplicissimo<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            myDataSource.Source = new DataProvider().Employees;<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            myDataSource.Filter += ((sender, args) =&gt;<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                {<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                }<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            );<br />
</span></p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">           myListBox.ItemsSource = myDataSource.View.SourceCollection;<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Naturalmente il codice del mio UserControl istanzia al suo interno una ClooectionView che effettua il dispatch degli elementi tramite la propria View, per fare questo ho ipotizzato anche un filtro che nel nostro esempio è vuoto in quanto suggerisco i video di Beth Massi su WindowsClient per approfondimenti sullaCollectionView e il databinding (consideriamo che il grouping non è supportato su Silverlight!)<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Questo è il link del codice nell&#8217;esempio dove troviamo sia il binding che le local connections <a href="http://www.4shared.com/file/145868837/8115df4/SiverlightLocalConnections.html">http://www.4shared.com/file/145868837/8115df4/SiverlightLocalConnections.html</a><br />
		</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ricordo anche che per le cose rapidissime nel Silverlight toolkit è presente anche il mitico DataGrid, che personalmente non amo molto ma consente di sviluppare le cose con una rapidità impressionante.<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">In linea di massima mi chiedo, che senso ha sviluppare ancora applicazioni Windows Form?  Secondo me per quando riguarda il codice nuovo, quindi quello prodotto da zero, la risposta è non ha alcun senso.<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ho fatto come Marzullo mi sono fatto una domanda e mi sono dato una risposta, va bè!<br />
</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=164&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2009/11/03/silverlight-3-altre-novita-parte-3-di-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>
	</item>
		<item>
		<title>Aspect Oriented Programming AOP con c# ed Enterprise Library</title>
		<link>http://emiliostefano.wordpress.com/2009/11/03/aspect-oriented-programming-aop-con-c-ed-enterprise-library-2/</link>
		<comments>http://emiliostefano.wordpress.com/2009/11/03/aspect-oriented-programming-aop-con-c-ed-enterprise-library-2/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 00:50:00 +0000</pubDate>
		<dc:creator>emiliostefano</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emiliostefano.wordpress.com/2009/11/03/aspect-oriented-programming-aop-con-c-ed-enterprise-library-2/</guid>
		<description><![CDATA[L&#8217;AOP ha decisamente preso piede in tutti i contesti in cui sia necessario effettuare attività di sviluppo di livello enterprise , vuoi per la manutenibilità del codice prodotto, vuoi per la semplificazione delle operazioni di test e per la necessità di adottare soluzioni architetturali di una certa robustezza. Enterprise Library ci viene in aiuto fornendo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=161&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">L&#8217;AOP ha decisamente preso piede in tutti i contesti in cui sia necessario effettuare attività di sviluppo di livello enterprise , vuoi per la manutenibilità del codice prodotto, vuoi per la semplificazione delle operazioni di test e per la necessità di adottare soluzioni architetturali di una certa robustezza. Enterprise Library ci viene in aiuto fornendo 2 Application Block per queste esigenze: Policy Application Block e Unity AB. I layer architetturali forniscono sempre una grande scalabilità nelle struttura applicativa del codice con lo sforzo iniziale di stratificare correttamente le logiche e l&#8217;IO.<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Per capire meglio di cosa stiamo parlando è opportuno fare un piccolo esempio introducendo appunto policy applcation block che ha anche un&#8217;età superiore di Unity, tale breve esempio anche se non fa parte  delle più recenti tecnologie sarà moloto utile a scopo didattico.<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Giusto per capire introdurre meglio l&#8217;ambito di discussione stiamo introducendo ciò che in gergo architetturale viene chiamato Separation of Concerns. Supponiamo dunque di avere un livello di business che deve semplicemente eseguire operazioni aritmetiche con due numeri.<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">public class MyAspectClass<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">{<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public int Multiply(int a, int b)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        try<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return a + b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        catch (Exception e)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            if (ExceptionPolicy.HandleException(&#8220;MyExceptionPolicy&#8221;, ex))<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                throw;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public int Subtract(int a, int b)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        try<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return a &#8211; b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        catch (Exception ex)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            if (ExceptionPolicy.HandleException(&#8220;MyExceptionPolicy&#8221;, ex))<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                throw;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">}<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Come si può facilmente vedere è necessario ripetere la stessa gestione delle eccezioni in entrambi i metodi di moltiplicazione e sottrazione cioè è questo tipo di concern è chiamato comunemente aspect o cross-cutting concern.<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Implementiamo dunque il Weaving cioè l&#8217;iniezione di codice nella nostra classe, che si può ottenere che differenti modalità cioè a compile time o a runtime. Questo tipo di comportamento con il più recente application block Unity viene chiamato <em>Interception </em>e probabilmente dedicherò un post apposito a unity per parlare dell&#8217;interception e come può essere utilizzato con davvero poche linee di codice.<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Per prima cosa definimo il comportamento cioè quello che in gergo viene chiamato <em>advice </em>cioè<em><br />
			</em>un intercettore che che sarà posto  metà tra il chiamante e il chiamato e che effetturà delle azioniall&#8217;ingresso e all&#8217;uscita di quando un pezzo di codice viene processato.Modificheremo allora le policy sui due metodi che abbiamo scritto in prcedenza in modo tale da omettere la gestione delle eccezioni( naturalmente questo è solo un esempio di come tutti gli aspetti ripetitivi possano essere iniettati a livello applicativo). Andremo dunque a effettuare un Marshalling sulla nostra semplice classe e a decorare i metodi con alcune policy, la nostra classettina diventerà dunque:<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">public class MyAspectClass: MarshalByRefObject<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">{<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    [ExceptionCallHandler("MyExceptionPolicy")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public int Multiply(int a, int b)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        return a + b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    [ExceptionCallHandler("MyExceptionPolicy")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public int Subtract(int a, int b)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        return a &#8211; b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">}<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">La decorazione dei metodi sarà configurata con una policy che si chiamaMyExceptionPolicy definita altrove e nella fattispecie configurata tramite file .config.<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ovviamente il codice risulta molto più sentetico e leggibile, ma scriveremo la regola di gestione delle eccezioni solo una volta con una netta facilità di manutenzione. Possiamo a questo punto individuare un problema, cioè che se per caso avremmo necessità di cambiare il nome della nostra policy di gestione dell&#8217;eccezione dovremmo andare a mano a modificare i punti in cui questa eccezione è richiamata con un notevole dispendio di tempo e la possibilità di perderci qualcosa per strada che non è detto che emerga nei test unitari.<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Un&#8217;altro metodo decisamente più efficace è quello di intercettare gli handler su una classe in modo da non dover passare tramite l&#8217;uso di attributi questo metodo è chiamato interception e fa la parte del leone nel più recente application block che è Unity.<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Per fare queste cose definendo dele policy che accppiano regole e handler, in modo che se una avviene una determinata regola viene scatenato l&#8217;handler relativo.<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">A questo punto per definire meglio le regole di applicazione delle policy  come nella tabella che segue:<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<div style="margin-left:5pt;">
<table style="border-collapse:collapse;" border="0">
<col>
<col>
<tbody valign="top">
<tr>
<td style="border-top:solid #a3a3a3 1pt;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;"><strong>Regola</strong></span></p>
</td>
<td style="border-top:solid #a3a3a3 1pt;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;"><strong>Descrizione</strong></span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Assembly</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">consente di definire il target di una classe sulla base del nome dell&#8217;assembly</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Custom Attribute</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">consente di definire il target di una classe sulla base del di un particolare tipo di attributo</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Member name</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">consente il target di un particolare membro di classe</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Method signature</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target su un particolare metodo</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Namespace</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target di un namespace</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Parameter Type</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target su un singolo tipo di parametro</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Property</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target su una proprietà</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Return Type</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target sul valore di ritorno di un metodo</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Tag attribute</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Target sul nome di un attributo</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Type</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">target su un tipo</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Supponiamo di voler creare una regola che controlii l&#8217;espirazione di un oggetto, faremo così:<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    [ConfigurationElementType(typeof(CustomMatchingRuleData))]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public class MyTimeOfDayRule : IMatchingRule<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        private readonly DateTime _beginTimeSpan;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        private readonly DateTime _endTimeSpan;<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public MyTimeOfDayRule(NameValueCollection configValues)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _beginTimeSpan = DateTime.Parse(configValues["BeginTimeSpan"]);<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _endTimeSpan = DateTime.Parse(configValues["EndTimeSpan"]);<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;">
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        #region IMatchingRule Members<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        bool IMatchingRule.Matches(MethodBase member)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            DateTime currentTime = DateTime.Today;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return (currentTime &gt;= _beginTimeSpan &amp;&amp; currentTime &lt;= _endTimeSpan);<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        #endregion<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Naturalmente in casi reali spesso vengono definite molte regole che saranno testate a runtime mediante la seguente catena logica<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><img src="http://emiliostefano.files.wordpress.com/2009/11/110309_0049_aspectorien1.png?w=480"><span style="font-family:Times New Roman;font-size:12pt;"><br />
		</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ora per utilizzare la nostra regola IMatchingRule dobbiamo configurare anche un handler che esegua delle operazione a fronte del match, EL fornisce anche una serie di handler predifiniti che sono in grado di comunicare con gli altri application block, essi sono:<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<div style="margin-left:5pt;">
<table style="border-collapse:collapse;" border="0">
<col>
<col>
<tbody valign="top">
<tr>
<td style="border-top:solid #a3a3a3 1pt;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;"><strong>Nome classe</strong></span></p>
</td>
<td style="border-top:solid #a3a3a3 1pt;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;"><strong>Descrizione</strong></span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">AuthorizationCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Utilizza Security application Block come handler</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">CachingCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Utilizza Caching Application Block come handler</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">ExceptionCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Utilizza Exception Handling Application Block come handler</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">LogCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Utilizza Logging Application block</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">PerformanceCounterCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Consente la registrazione di dati di performance</span></p>
</td>
</tr>
<tr>
<td style="border-top:none;border-left:solid #a3a3a3 1pt;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">ValidationCallHandler</span></p>
</td>
<td style="border-top:none;border-left:none;border-bottom:solid #a3a3a3 1pt;border-right:solid #a3a3a3 1pt;padding:5px;">
<p><span style="color:black;">Utilizza Validation Application Block come handler</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Naturalmente è possibile definire il nostro handler e pertanto avremo dovremo implementare l&#8217;interfaccia ICallHandler per crere una classe che si comporti da da Handler, vediamone un esempio:<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public class CreateFileHandler: ICallHandler<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        private readonly string _fileName;<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        #region ICallHandler Members<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public CreateFileHandler(NameValueCollection configValues)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            _fileName = configValues["FileName"];<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            FileStream stream = File.Create(_fileName);<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            input.InvocationContext["CreatedFileStream"] = stream;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            IMethodReturn msg = getNext()(input, getNext);<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            FileStream returnStream = msg.InvocationContext["CreatedFileStream"] as FileStream;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            if (returnStream != null)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                try<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                { returnStream.Close();}<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                catch {}<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            if (stream != null)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                try { stream.Close(); }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">                catch { }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return msg;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public int Order { get; set; }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        #endregion<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">E&#8217; abbastanza intuibile come venga collocato mediante l&#8217;interfaccia ICallHandler nella catena delle chiamate illustrata prima<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Non ci resta che assemblare il tutto medinte il PolicyInjector<br />
</span></p>
<p style="margin-left:5pt;"><img src="http://emiliostefano.files.wordpress.com/2009/11/110309_0049_aspectorien2.png?w=480"><span style="font-family:Times New Roman;font-size:12pt;"><br />
		</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    public class MyAspectClass : MarshalByRefObject<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        [ExceptionCallHandler("MyExceptionPolicy")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        [ValidationCallHandler]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        [RangeValidator(typeof(Int32), "0",<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            RangeBoundaryType.Inclusive, "0", RangeBoundaryType.Ignore,<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            MessageTemplate = "Value must be greater than zero.") ]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public int Multiply(<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            [RangeValidator(typeof(Int32), "0",<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            RangeBoundaryType.Inclusive, "0", RangeBoundaryType.Ignore,<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            MessageTemplate = "Value must be greater than zero.")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            int a,<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            [RangeValidator(typeof(Int32), "0",<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            RangeBoundaryType.Inclusive, "0", RangeBoundaryType.Ignore,<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            MessageTemplate = "Value must be greater than zero.")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            int b<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            )<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return a + b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        [ExceptionCallHandler("MyExceptionPolicy")]<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        public int Subtract(int a, int b)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            return a &#8211; b;<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">    }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Ora configuriamo il tutto tramite l&#8217;utility di configurazione e provvediamo alla costruzione della nostra classe in questo modo<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        static void Main(string[] args)<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        {<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            MyAspectClass c = PolicyInjection.Create&lt;MyAspectClass&gt;();<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            c.Multiply(0, 5);<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">            Console.ReadLine();<br />
</span></p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">        }<br />
</span></p>
<p style="margin-left:5pt;"> <br />
 </p>
<p style="margin-left:5pt;"><span style="font-family:DejaVu Sans Condensed;font-size:8pt;">Il codice dell&#8217;esempio è scaricabile da qui: <a href="http://www.4shared.com/file/145800910/ef751dad/Policy_application_block.html">http://www.4shared.com/file/145800910/ef751dad/Policy_application_block.html</a><br />
		</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/emiliostefano.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/emiliostefano.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/emiliostefano.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=emiliostefano.wordpress.com&amp;blog=6718752&amp;post=161&amp;subd=emiliostefano&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://emiliostefano.wordpress.com/2009/11/03/aspect-oriented-programming-aop-con-c-ed-enterprise-library-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/984960ed9c0243a0b2acf7fc46740a52?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">emiliostefano</media:title>
		</media:content>

		<media:content url="http://emiliostefano.files.wordpress.com/2009/11/110309_0049_aspectorien1.png" medium="image" />

		<media:content url="http://emiliostefano.files.wordpress.com/2009/11/110309_0049_aspectorien2.png" medium="image" />
	</item>
	</channel>
</rss>
