<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>BlogServiceHost.Create()</title><link>http://dotnetside.org/blogs/fabio/default.aspx</link><description>WCF &amp;amp; Friends
-
Il blog di Fabio Cozzolino</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/FabioCozzolino" type="application/rss+xml" /><feedburner:browserFriendly></feedburner:browserFriendly><item><title>Regex Hero</title><link>http://dotnetside.org/blogs/fabio/archive/2009/07/01/regex-hero.aspx</link><pubDate>Wed, 01 Jul 2009 11:47:14 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22154</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22154</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/07/01/regex-hero.aspx#comments</comments><description>&lt;p&gt;No, non sono in silenzio stampa … &lt;img src="http://dotnetside.org/emoticons/emotion-1.gif" alt="Smile" /&gt;, è che, insomma, il periodo… è un po’ così….&lt;/p&gt;  &lt;p&gt;Comunque, nel frattempo giro il &lt;a href="http://blog.boschin.it/archive/2009/07/01/Regular-Expression-tool.aspx"&gt;post&lt;/a&gt; di &lt;a href="http://blog.boschin.it"&gt;Andrea&lt;/a&gt;. Davvero un ottimo &lt;a href="http://regexhero.net/"&gt;tool per testare le famigerate Regular Expression&lt;/a&gt; pubblicato da &lt;a href="http://www.bucketsoft.com/"&gt;BucketSoft&lt;/a&gt;. Ha anche una funzione per fare un minimo di benchmark. Me lo segno per la prossima volta che mi servirà … &lt;img src="http://dotnetside.org/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22154" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Regular+Expression/default.aspx">Regular Expression</category></item><item><title>Ultimi posti …</title><link>http://dotnetside.org/blogs/fabio/archive/2009/05/10/ultimi-posti.aspx</link><pubDate>Sun, 10 May 2009 17:52:56 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22120</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22120</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/05/10/ultimi-posti.aspx#comments</comments><description>&lt;p&gt;… per il &lt;a href="http://dotnetside.org/eventi/Default.aspx?IDevento=17" target="_blank"&gt;prossimo evento&lt;/a&gt; &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;. Come è intuibile dal titolo e dall’agenda, gli argomenti che tratteremo sono temi caldi e molto discussi su cui spesso è necessario il confronto aperto, e questo workshop è un’occasione assolutamente da non perdere. E poi, non capita molto spesso di avere qui &lt;a href="http://www.geniodelmale.info/" target="_blank"&gt;Lorenzo Barbieri&lt;/a&gt; … approfittatene !!!&lt;/p&gt;  &lt;p&gt;Infine, ci saranno premi decisamente interessanti per i partecipanti !!!&lt;/p&gt;  &lt;p&gt;Ps.: durante l’evento se avete dubbi o questioni su WCF, chiedetemi pure … &lt;img src="http://dotnetside.org/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22120" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Eventi/default.aspx">Eventi</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Workshop/default.aspx">Workshop</category></item><item><title>Microsoft.Jet.OLEDB.4.0 su x64</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/16/microsoft-jet-oledb-4-0-su-x64.aspx</link><pubDate>Thu, 16 Apr 2009 21:23:36 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22097</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22097</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/16/microsoft-jet-oledb-4-0-su-x64.aspx#comments</comments><description>&lt;p&gt;Oggi mi sono imbattuto in questo errore:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;L’errore si verifica, almeno nel mio caso, eseguendo un’applicazione .NET su un server x64. La soluzione è semplice, basta forzare il target dell’applicazione su x86 e tutto torna poi a funzionare come dovrebbe.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://fabicoz.interfree.it/images/Microsoft.Jet.OLEDB.4.0sux64_13767/imagee32a6c1634ab44749a46c8de70e62477.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://fabicoz.interfree.it/images/Microsoft.Jet.OLEDB.4.0sux64_13767/image_thumb3af63a71f6cc416ab143afa6d04ff00c.png" width="527" height="205" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ciauz&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22097" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/.NET+Framework/default.aspx">.NET Framework</category></item><item><title>Workshop “Sviluppare applicazioni di qualità in .NET”</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/14/workshop-sviluppare-applicazioni-di-qualit-224-in-net.aspx</link><pubDate>Tue, 14 Apr 2009 20:00:47 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22093</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22093</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/14/workshop-sviluppare-applicazioni-di-qualit-224-in-net.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;”The Times They Are A-Changin'”&lt;/em&gt;, sulle note di una canzone di Bob Dylan annunciamo il prossimo workshop .netSide: &lt;a href="http://dotnetside.org/content/WorkshopSviluppareApplicazioniDiQualita.aspx" target="_blank"&gt;“Sviluppare applicazioni di qualità in .NET”&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;In questo incontro parliamo di patterns, best practices, testing, etc,.. tutti ingredienti che portano allo &lt;em&gt;“sviluppo di applicazioni moderne che puntano ad alti livelli di affidabilità e stabilità, oltre a portare all'abbattimento dei costi di manutenzione”&lt;/em&gt;: Dopo l’intervento del già collaudato &lt;a href="http://blog.vitoarconzo.it" target="_blank"&gt;MVP Vito Arconzo&lt;/a&gt;, vedremo il debutto di &lt;a href="http://dotnetside.org/blogs/mario" target="_blank"&gt;Mario Ferrante&lt;/a&gt;, collaboratore importante nelle dinamiche del gruppo che ora ha finalmente deciso di mettersi in prima linea. Grande Mario !!!&lt;/p&gt;  &lt;p&gt;Infine, ma assolutamente non per ultimo, chiuderà l’evento &lt;a href="http://www.geniodelmale.info/" target="_blank"&gt;Lorenzo Barbieri&lt;/a&gt; di &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt;, che di sicuro non ha bisogno di presentazioni grazie anche ai suoi numerosi contributi dati in passato alla community.&lt;/p&gt;  &lt;p&gt;Fissate quindi la data: 15 Maggio 2009 ore 14:30, presso la sede di Tecnopolis a Valenzano (BA). Non vi resta che &lt;a href="http://dotnetside.org/content/WorkshopSviluppareApplicazioniDiQualita.aspx" target="_blank"&gt;consultare l’agenda&lt;/a&gt; e &lt;a href="http://dotnetside.org/eventi/Default.aspx?IDevento=17" target="_blank"&gt;registrarvi&lt;/a&gt;!!&lt;/p&gt;  &lt;p&gt;Ciauz … &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22093" width="1" height="1"&gt;</description></item><item><title>[WCF] Chiudere correttamente il client</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/14/wcf-chiudere-correttamente-il-client.aspx</link><pubDate>Tue, 14 Apr 2009 19:52:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22095</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22095</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/14/wcf-chiudere-correttamente-il-client.aspx#comments</comments><description>&lt;p&gt;Uno degli usi più comuni ed allo stesso tempo più errati di un client WCF è l’utilizzo di un blocco &lt;em&gt;using&lt;/em&gt;. Vediamo perchè un codice come questo è errato:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (MyClient client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyClient())
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  3:     client.RemoteOperation();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  4: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;che, quando compilato, viene tradotto in questo:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  1: MyClient client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyClient();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  2: &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  3: {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  4:     client.RemoteOperation();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  5: }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  6: &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  7: {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  8:     ((IDisposable)client).Dispose();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  9: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Qui, però, abbiamo un problemino. Se il client termina correttamente la chiamata, infatti, la dispose tenta di chiudere il channel, e questo è giusto. Ma se la comunicazione va in eccezione, allora la dispose tenterà comunque di chiudere il channel, generando quindi una nuova eccezione proprio perchè un channel in stato &lt;em&gt;Faulted&lt;/em&gt; non può passare in stato &lt;em&gt;Closed&lt;/em&gt;. L’eccezione generata è infatti:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Come fare quindi? Semplice non usare lo &lt;em&gt;using&lt;/em&gt; e “tornare” al classico “try..catch” esplicito:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  1: MyClient client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; MyClient();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  2: &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  3: {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  4:     client.RemoteOperation();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  5:     client.Close();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  6: }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  7: &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception ex)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  8: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  9:     client.Abort();
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 10: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;in questo modo chiudiamo correttamente il channel mettendolo in &lt;em&gt;Closed&lt;/em&gt;, effettuando però una serie di operazioni come il disposing dei vari channel utilizzati, la chiusura della sessione corrente (se utilizzata), la chiusura di eventuali transazioni ancora in piedi, etc….&lt;/p&gt;

&lt;p&gt;Queste stesse operazioni vengono eseguite anche dalla close, ma chiaramente con le differenze del caso dovute alle specifiche implementazioni dei vari channel coinvolti. Tenendo presente come è composto il channel layer di WCF, è chiaro che quando viene invocato l’Abort o il Close sul client, questo viene propagato verso tutti i vari channels, generando quindi comportamenti differenti sulla base dello specifico channel.&lt;/p&gt;

&lt;p&gt;Alcuni riferimenti: 
  &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa355056.aspx" href="http://msdn.microsoft.com/en-us/library/aa355056.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa355056.aspx&lt;/a&gt;

  &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/aa354510.aspx" href="http://msdn.microsoft.com/en-us/library/aa354510.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa354510.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22095" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category></item><item><title>Velocity CTP3</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/08/velocity-ctp3.aspx</link><pubDate>Wed, 08 Apr 2009 05:24:16 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22084</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22084</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/08/velocity-ctp3.aspx#comments</comments><description>&lt;p&gt;Rilasciata da poche ore la CTP3 di "Velocity", il tool per la cache distribuita sviluppato da Microsoft:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;For community technology preview 3 (CTP3), Microsoft project code named "Velocity" offers several enhancements and revised APIs. The enhancements include cache notifications feature, performance improvements, security enhancements, and new cluster management options. There have also been updates to the installation program.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;L'annuncio ufficiale sul blog del team: &lt;a title="http://blogs.msdn.com/velocity/" href="http://blogs.msdn.com/velocity/"&gt;http://blogs.msdn.com/velocity/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B24C3708-EEFF-4055-A867-19B5851E7CD2&amp;amp;displaylang=en"&gt;Download Microsoft Project Code Named "Velocity" Community Technology Preview 3&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22084" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Velocity/default.aspx">Velocity</category></item><item><title>[Extension Methods] Aggiungere un nuovo MessageInterceptor</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/07/extension-methods-aggiungere-un-nuovo-messageinterceptor.aspx</link><pubDate>Tue, 07 Apr 2009 19:56:16 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22082</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22082</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/07/extension-methods-aggiungere-un-nuovo-messageinterceptor.aspx#comments</comments><description>&lt;p&gt;Gli &lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank"&gt;Extension Methods&lt;/a&gt; mi piacciono parecchio. Li ritengo molto utili e comodi con il fine di rendere immediate e più semplici determinate operazioni che potrei definire “ripetitive”. Oggi, dopo l’ennesimo MessageInterceptor creato ed aggiunto ad un service host, mi sono deciso a creare un Extension Method per semplificarmi la vita:&lt;/p&gt;  &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ServiceModelExtensions
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; AttachInterceptor(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; ServiceHostBase host, IDispatchMessageInspector inspector)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  4:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  5:         &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (ChannelDispatcher channelDispatcher &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; host.ChannelDispatchers)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  6:         {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  7:             &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (EndpointDispatcher endpointDispatcher &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; channelDispatcher.Endpoints)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  8:             {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  9:                 endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 10:             }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 11:         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 12:     }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 13: 
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 14:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; AttachInterceptor(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; ServiceHostBase host, Type inspectorType)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 15:     {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 16:         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (inspectorType.HasInterface(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(IDispatchMessageInspector)))
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 17:         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 18:             &lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Exception(&amp;quot;&lt;span style="color: #8b0000"&gt;Il tipo richiesto non implementa l'interfaccia 'IDispatchMessageInspector'.&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 19:         }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 20: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 21:         IDispatchMessageInspector inspector = (IDispatchMessageInspector) Activator.CreateInstance(inspectorType);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 22:         &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (ChannelDispatcher channelDispatcher &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; host.ChannelDispatchers)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 23:         {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 24:             &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (EndpointDispatcher endpointDispatcher &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; channelDispatcher.Endpoints)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 25:             {
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 26:                 endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 27:             }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 28:         }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 29:     }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 30: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 31:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; HasInterface(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt; Type type, Type interfaceType)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 32:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 33:         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; type.GetInterfaces().Any(t =&amp;gt; t == interfaceType);
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 34:     }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 35: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;L’extension method può poi essere utilizzato così:&lt;/p&gt;

&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; LoggerServiceBehavior : IServiceBehavior
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  4:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  5:     }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  6: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  7:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection&amp;lt;ServiceEndpoint&amp;gt; endpoints, BindingParameterCollection bindingParameters)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  8:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;  9:     }
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 10: 
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 12:     {
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 13:         serviceHostBase.AttachInterceptor(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(LoggerMessageInterceptor));
&lt;/pre&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 14:     }
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt; 15: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;A mio parere viene semplificata notevolmente la leggibilità del codice. Un’altro esempio dell’utilità degli extension methods. Ovvio, come in ogni cosa, non bisogna abusarne… &lt;img src="http://dotnetside.org/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22082" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Extension+Methods/default.aspx">Extension Methods</category></item><item><title>WCF Champ vs The Contender</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/04/wcf-champ-vs-the-contender.aspx</link><pubDate>Sat, 04 Apr 2009 18:41:41 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22079</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22079</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/04/wcf-champ-vs-the-contender.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/net/wcf/champ/" target="_blank"&gt;C’è una battaglia in atto&lt;/a&gt; ... chi la spunterà ?? &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:61ae852a-f307-47e8-91d4-b8a45e116b8f" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZXQtZsC0JZ4&amp;amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ZXQtZsC0JZ4&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Simpatica, vero??&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22079" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Video/default.aspx">Video</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Varie/default.aspx">Varie</category></item><item><title>MSDN low-band view</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/04/msdn-low-band-view.aspx</link><pubDate>Fri, 03 Apr 2009 22:37:41 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22076</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22076</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/04/msdn-low-band-view.aspx#comments</comments><description>&lt;p&gt;L’ho notato solo oggi, probabilmente è attivo solo da qualche giorno, ma la nuova low-band view del sito MSDN mi piace parecchio.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://fabicoz.interfree.it/images/MSDNlowbandview_8B8/imagee18582b704e540a0ad33af4df3c6ccaf.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://fabicoz.interfree.it/images/MSDNlowbandview_8B8/image_thumb139abb06712048d7aa50b5545d6873bb.png" width="522" height="237" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://fabicoz.interfree.it/images/MSDNlowbandview_8B8/imagea630e95c562e4a9c99692fc66496afde.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://fabicoz.interfree.it/images/MSDNlowbandview_8B8/image_thumb4bd5be93a52a4756a9644587465176cc.png" width="523" height="229" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Più fluida, semplice, diretta ai contenuti. Non so … mi ci trovo meglio e mi sa che la renderò persistente … &lt;img src="http://dotnetside.org/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22076" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/MSDN/default.aspx">MSDN</category></item><item><title>Windows 7 Installation Fest: Registrazioni video</title><link>http://dotnetside.org/blogs/fabio/archive/2009/04/03/windows-7-installation-fest-registrazioni-video.aspx</link><pubDate>Fri, 03 Apr 2009 19:50:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22078</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22078</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/04/03/windows-7-installation-fest-registrazioni-video.aspx#comments</comments><description>&lt;p&gt;Se vi siete persi l’evento, &lt;a href="http://www.francescorenzo.com/?p=483" target="_blank"&gt;Francesco Renzo&lt;/a&gt; ha &lt;a href="http://vimeo.com/3961640"&gt;registrato la sessione e pubblicato il video&lt;/a&gt; su &lt;a href="http://vimeo.com" target="_blank"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt; &lt;object width="400" height="288"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3961640&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3961640&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" width="400" height="288"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;Ringrazio davvero Francesco per la registrazione, promosso a pieni voti come reporter ufficiale DotNetSide &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;. Io intanto mi scuso con tutti per la mia mancata partecipazione, purtroppo per problemi lavorativi non ho potuto prendere parte all’evento. Cercherò di farmi perdonare… &lt;img src="http://dotnetside.org/emoticons/emotion-1.gif" alt="Smile" /&gt;…&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22078" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Eventi/default.aspx">Eventi</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Workshop/default.aspx">Workshop</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Windows+Seven/default.aspx">Windows Seven</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Windows/default.aspx">Windows</category></item><item><title>Inversion of Control con WCF e Unity (Parte III)</title><link>http://dotnetside.org/blogs/fabio/archive/2009/03/28/inversion-of-control-con-wcf-e-unity-parte-iii.aspx</link><pubDate>Sat, 28 Mar 2009 19:25:05 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22065</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22065</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/03/28/inversion-of-control-con-wcf-e-unity-parte-iii.aspx#comments</comments><description>&lt;p&gt;Dalle puntate precedenti:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://dotnetside.org/blogs/fabio/archive/2009/03/21/inversion-of-control-con-wcf-e-unity.aspx" target="_blank"&gt;Inversion of Control con WCF e Unity (Parte I)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://dotnetside.org/blogs/fabio/archive/2009/03/22/inversion-of-control-con-wcf-e-unity-su-iis-parte-ii.aspx" target="_blank"&gt;Inversion of Control con WCF e Unity (Parte II)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Abbiamo visto come poter sviluppare un semplice sistema diIoC con WCF sfruttando Unity. La stessa logica è in realtà applicabile a tutti gli altri framework .NET che forniscono funzionalità di IoC.&lt;/p&gt;  &lt;p&gt;Vorrei però arricchire quanto già detto per consentire di sfruttare lo &lt;em&gt;UnityServiceBehavior&lt;/em&gt; anche in situazioni in cui tutte le impostazioni vengono gestite direttamente dal file di configurazione, e non da codice come abbiamo precedentemente visto.&lt;/p&gt;  &lt;p&gt;Per ottenere questo risultato abbiamo bisogno di sviluppare una particolare estenzione, una classe che eredita dal &lt;em&gt;BehaviorExtensionElement&lt;/em&gt;. Sviluppiamo quindi il nostro &lt;em&gt;UnityServiceBehaviorExtensionElement&lt;/em&gt;.&lt;/p&gt;  &lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; UnityServiceBehaviorExtensionElement : BehaviorExtensionElement
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     [ConfigurationProperty(&amp;quot;&lt;span style="color:#8b0000;"&gt;containerName&lt;/span&gt;&amp;quot;)]
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; ContainerName
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:         &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:         {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;[&amp;quot;&lt;span style="color:#8b0000;"&gt;containerName&lt;/span&gt;&amp;quot;];
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:     &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; CreateBehavior()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityServiceBehavior(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ContainerName);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; Type BehaviorType
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:         &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(UnityServiceBehavior); }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;La classe dichiara semplicemente due metodi: il primo restituisce l’istanza del behavior, mentre il secondo identifica il tipo di behavior che stiamo costruendo. Nella creazione dell’istanza dell’&lt;em&gt;UnityServiceBehavior&lt;/em&gt; viene passato il valore della proprietà &lt;em&gt;ContainerName&lt;/em&gt; che contiene il nome della sezione di configurazione relativa al container che vogliamo utilizzare.&lt;/p&gt;

&lt;p&gt;Immaginiamo di avere questa configurazione di Unity:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;unity&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;containers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;container&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;BookServiceContainer&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;types&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Service.InnerBookService, DotNetSide.WCF.IoC.Service&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:               &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;inner&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Service.IBookService, DotNetSide.WCF.IoC.Service&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:               &lt;span style="color:#ff0000;"&gt;mapTo&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Service.BookService, DotNetSide.WCF.IoC.Service&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;typeConfig&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;constructor&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;innerService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;parameterType&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Service.InnerBookService, DotNetSide.WCF.IoC.Service&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependency&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;inner&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:             &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;constructor&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:           &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;typeConfig&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;types&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23:     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;container&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;containers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27: &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;unity&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28: &lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;La proprietà &lt;em&gt;ContainerName&lt;/em&gt; dovrà riportare il nome &lt;em&gt;BookServiceContainer&lt;/em&gt;. Prima di utilizzare lo &lt;em&gt;UnityServiceBehaviorExtensionElement&lt;/em&gt;, creiamo il costruttore dello &lt;em&gt;UnityServiceBehavior&lt;/em&gt; che accetta come parametro il nome del container:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; UnityServiceBehavior(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; containerName)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:     : &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;(GetContainer(containerName))
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3: {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IUnityContainer GetContainer(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; containerName)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7: {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:     IUnityContainer unityContainer = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:     var configurationSection =
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:         (UnityConfigurationSection)ConfigurationManager.GetSection(&amp;quot;&lt;span style="color:#8b0000;"&gt;unity&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:     UnityContainerElement unityContainerElement = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(containerName))
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:         unityContainerElement = configurationSection.Containers[containerName];
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (unityContainerElement == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:         unityContainerElement =
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21:             configurationSection.Containers.Default;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24:     unityContainer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityContainer();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:     unityContainerElement.Configure(unityContainer);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27:     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; unityContainer;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Il costruttore invoca il metodo privato &lt;em&gt;GetContainer&lt;/em&gt; per ottenere l’istanza del container e successivamente chiama il costruttore che accetta il container come parametro passando, appunto, l’istanza appena ottenuta.&lt;/p&gt;

&lt;p&gt;Ora possiamo utilizzare la nostra estensione nel file di configurazione. Aggiungiamo un nuovo elemento nella sezione &lt;em&gt;extensions&lt;/em&gt; del &lt;em&gt;system.serviceModel&lt;/em&gt;:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:   ...
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;extensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;unityService&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:            &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Unity.UnityServiceBehaviorExtensionElement, DotNetSide.WCF.IoC.Unity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviorExtensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;extensions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:   ...
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10: &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Inseriamo quindi la configurazione del behavior:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2:   ...
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;behavior&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Service.BookServiceBehavior&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;serviceMetadata&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;httpGetEnabled&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;serviceDebug&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;includeExceptionDetailInFaults&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;unityService&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;containerName&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;BookServiceContainer&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;behavior&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;behaviors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:   ...
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13: &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Ora possiamo creare semplicemente il nostro &lt;em&gt;ServiceHost&lt;/em&gt; (non lo &lt;em&gt;UnityServiceHost&lt;/em&gt;) ed utilizzarlo normalmente. Questo utilizzo di pone anche come alternativa a quanto visto nella seconda parte (&lt;a href="http://dotnetside.org/blogs/fabio/archive/2009/03/22/inversion-of-control-con-wcf-e-unity-su-iis-parte-ii.aspx" target="_blank"&gt;Inversion of Control con WCF e Unity (Parte II)&lt;/a&gt;) perchè in questo modo non è più necessario utilizzare il &lt;em&gt;ServiceHostFactory&lt;/em&gt; per istanziare il &lt;em&gt;ServiceHost&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Se avete dubbi, chiedete pure …&lt;/p&gt;

&lt;p&gt;bye&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22065" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/IoC/default.aspx">IoC</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Unity/default.aspx">Unity</category></item><item><title>Inversion of Control con WCF e Unity (Parte II)</title><link>http://dotnetside.org/blogs/fabio/archive/2009/03/22/inversion-of-control-con-wcf-e-unity-su-iis-parte-ii.aspx</link><pubDate>Sun, 22 Mar 2009 03:20:00 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22052</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22052</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/03/22/inversion-of-control-con-wcf-e-unity-su-iis-parte-ii.aspx#comments</comments><description>&lt;p&gt;Questo post &amp;egrave; basato sul precedente &lt;a target="_blank" href="http://dotnetside.org/blogs/fabio/archive/2009/03/21/inversion-of-control-con-wcf-e-unity.aspx"&gt;Inversion of Control con WCF e Unity&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nel post precedente abbiamo visto in che modo &amp;egrave; possibile abilitare l&amp;rsquo;uso dell&amp;rsquo;IoC anche per i servizi WCF. Nell&amp;rsquo;esempio abbiamo visto per&amp;ograve; come creare il ServiceHost in applicazioni self-hosted. Per utilizzare il tutto anche in applicazioni ASP.NET e quindi in hosting su IIS dobbiamo implementare un ulteriore componente: il &lt;em&gt;ServiceHostFactory&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Implementiamo quindi il nostro &lt;em&gt;UnityServiceHostFactory&lt;/em&gt;:&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; UnityServiceHostFactory : ServiceHostFactory
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:         IUnityContainer unityContainer = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:         var configurationSection = 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:             (UnityConfigurationSection)ConfigurationManager.GetSection(&amp;quot;&lt;span style="color:#8b0000;"&gt;unity&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8: 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; configurationName = GetConfigurationName(serviceType);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:         var unityContainerElement = 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:             configurationSection.Containers[configurationName];
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (unityContainerElement == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:         {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:             unityContainerElement = 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:                 configurationSection.Containers.Default;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:         }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17: 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (unityContainerElement != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:         {
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:             unityContainer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityContainer();
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21:             unityContainerElement.Configure(unityContainer);
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:         }
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23: 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityServiceHost(unityContainer, serviceType, baseAddresses);
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:     }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26: 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; GetConfigurationName(Type serviceType)
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28:     {
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 29:         ServiceBehaviorAttribute serviceBehaviorAttribute = serviceType.GetCustomAttributes(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 30:             .OfType&amp;lt;ServiceBehaviorAttribute&amp;gt;()
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 31:             .FirstOrDefault();
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 32: 
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 33:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (serviceBehaviorAttribute != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 34:             !&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.IsNullOrEmpty(serviceBehaviorAttribute.ConfigurationName))
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 35:                    ? serviceBehaviorAttribute.ConfigurationName
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 36:                    : serviceType.FullName;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 37:     }
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 38: }&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Il metodo &lt;em&gt;CreateServiceHost&lt;/em&gt; &amp;egrave; quello invocato dal &lt;em&gt;ServiceHostingEnvironment&lt;/em&gt; per la creazione, appunto, del &lt;em&gt;ServiceHost&lt;/em&gt;. In questo metodo creiamo l&amp;rsquo;istanza dell&amp;rsquo;&lt;em&gt;UnityContainer&lt;/em&gt; e poi la configuriamo sulla base di quanto indicato nel file di configurazione (web.config, in questo caso). La soluzione qui implementata cerca inizialmente, tra i containers, uno specifico il cui nome corrisponde al &lt;em&gt;ConfigurationName&lt;/em&gt; eventualmente indicato nell&amp;rsquo;attributo &lt;em&gt;ServiceBehavior&lt;/em&gt; dell&amp;rsquo;implementazione del servizio. Se non specificato, viene utilizzato il nome completo del tipo del servizio. Se per&amp;ograve; il container specifico non viene trovato, lo unityContainer viene configurato con il container di default (senza nome). Infine, viene creata l&amp;rsquo;istanza del ServiceHost passando lo unityContainer.&lt;/p&gt;
&lt;p&gt;A questo punto specifichiamo nel file .svc l&amp;rsquo;utilizzo dello &lt;em&gt;UnityServiceHostFactory&lt;/em&gt;:&lt;/p&gt;
&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;%@ ServiceHost Language=&amp;quot;C#&amp;quot; Debug=&amp;quot;true&amp;quot; 
&lt;/pre&gt;
&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: Service=&amp;quot;DotNetSide.WCF.IoC.Service.BookService, DotNetSide.WCF.IoC.Service&amp;quot;
&lt;/pre&gt;
&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3: Factory=&amp;quot;DotNetSide.WCF.IoC.Unity.UnityServiceHostFactory, DotNetSide.WCF.IoC.Unity&amp;quot; %&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;p&gt;Ora siamo pronti per eseguire la nostra applicazione. In allegato troverete il codice completo dell&amp;rsquo;esempio.&lt;/p&gt;
&lt;p&gt;Anche qui il codice &amp;egrave; reso volutamente molto semplice per evitare di essere troppo prolisso.&lt;/p&gt;
&lt;p&gt;bye &lt;img src="http://dotnetside.org/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22052" width="1" height="1"&gt;</description><enclosure url="http://dotnetside.org/Downloads/Fabio/DotNetSide.WCF.IoC.rar" length="30241" type="application/octet-stream" /><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/IoC/default.aspx">IoC</category></item><item><title>Inversion of Control con WCF e Unity</title><link>http://dotnetside.org/blogs/fabio/archive/2009/03/21/inversion-of-control-con-wcf-e-unity.aspx</link><pubDate>Sat, 21 Mar 2009 18:37:56 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22050</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22050</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/03/21/inversion-of-control-con-wcf-e-unity.aspx#comments</comments><description>&lt;p&gt;Nei giorni scorsi mi è capitato spesse volte di parlare con amici e colleghi di Inversion of Control (IoC) e WCF. Perciò mi sono deciso a pubblicare un breve post per spiegare i passaggi necessari per ottenere l’utilizzo di IoC con un servizio WCF. Nel caso specifico ho scelto &lt;a href="http://www.codeplex.com/unity" target="_blank"&gt;Unity&lt;/a&gt; come framework per l’IoC.&lt;/p&gt;  &lt;p&gt;Sono innanzitutto necessari 3 componenti:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;InstanceProvider&lt;/em&gt;: è il componente che si incarica di creare l’istanza del servizio. In definitiva è quello che userà direttamente Unity; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;ServiceBehavior&lt;/em&gt;: ci consente di creare l’istanza dell’&lt;em&gt;InstanceProvider&lt;/em&gt; e di “agganciarla” al servizio corrente; &lt;/li&gt;    &lt;li&gt;&lt;em&gt;ServiceHost&lt;/em&gt;: è il gestore del nostro servizio. Il ServiceHost ha il compito di configurare il servizio per l’utilizzo e quindi si occuperà di applicare il &lt;em&gt;ServiceBehavior&lt;/em&gt; creato; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Avremo quindi rispettivamente: &lt;em&gt;UnityInstanceProvider&lt;/em&gt;, &lt;em&gt;UnityServiceBehavior&lt;/em&gt; e &lt;em&gt;UnityServiceHost.&lt;/em&gt;&lt;/p&gt;  &lt;h4&gt;UnityInstanceProvider&lt;/h4&gt;  &lt;p&gt;Il primo passo è, come detto, quello di creare l’InstanceProvider. Il codice è in realtà molto semplice, almeno in questa prima fase:&lt;/p&gt;  &lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; UnityInstanceProvider : IInstanceProvider
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; IUnityContainer container;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; Type contractType;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; UnityInstanceProvider(IUnityContainer container, Type contractType)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.container = container;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.contractType = contractType;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; GetInstance(InstanceContext instanceContext)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; GetInstance(instanceContext, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; GetInstance(InstanceContext instanceContext, Message message)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; container.Resolve(contractType);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ReleaseInstance(InstanceContext instanceContext, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; instance)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24:         container.Teardown(instance);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:     }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Il costruttore accetta in input l’istanza del container ed il tipo di contratto dello specifico endpoint. Entrambi verranno poi utilizzati dal GetInstance per risolvere l’istanza sulla base del contesto. Il metodo può chiaramente essere migliorato.&lt;/p&gt;

&lt;h4&gt;UnityServiceBehavior&lt;/h4&gt;

&lt;p&gt;Il ServiceBehavior, come detto, si occupa di creare l’InstanceProvider per gli specifici endpoint del servizio:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; UnityServiceBehavior : IServiceBehavior
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; IUnityContainer container;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; UnityServiceBehavior(IUnityContainer container)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.container = container;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection&amp;lt;ServiceEndpoint&amp;gt; endpoints, BindingParameterCollection bindingParameters)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ChannelDispatcher channelDispatcher &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; serviceHostBase.ChannelDispatchers)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21:         {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:             &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (EndpointDispatcher endpointDispatcher &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; channelDispatcher.Endpoints)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23:             {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24:                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (endpointDispatcher.ContractName != &amp;quot;&lt;span style="color:#8b0000;"&gt;IMetadataExchange&lt;/span&gt;&amp;quot;)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:                 {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26:                     &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; contractName = endpointDispatcher.ContractName;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27:                     ServiceEndpoint serviceEndpoint = serviceDescription.Endpoints.FirstOrDefault(e =&amp;gt; e.Contract.Name == contractName);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28:                     endpointDispatcher.DispatchRuntime.InstanceProvider = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityInstanceProvider(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.container, serviceEndpoint.Contract.ContractType);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 29:                 }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 30:             }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 31:         }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 32:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 33: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Il costruttore riceve dal ServiceHost l’istanza del container che viene poi assegnata al DispatchRuntime dell’EndpointDispatcher, selezionando anche il tipo di contratto che deve essere utilizzato per la risoluzione dell’istanza del servizio.&lt;/p&gt;

&lt;h4&gt;UnityServiceHost&lt;/h4&gt;

&lt;p&gt;Il passo finale è la creazione del ServiceHost, il componente che ci consente di configurare il servizio:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; UnityServiceHost : ServiceHost
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; IUnityContainer unityContainer;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; UnityServiceHost(IUnityContainer unityContainer, Type serviceType) : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;(serviceType)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.unityContainer = unityContainer;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; OnOpening()
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:         &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.OnOpening();
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Description.Behaviors.Find&amp;lt;UnityServiceBehavior&amp;gt;() == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:         {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16:             &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.Description.Behaviors.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityServiceBehavior(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.unityContainer));
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:         }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Anche qui l’implementazione è davvero molto semplice. Il ServiceHost riceve nel costruttore l’istanza del container e contemporaneamente il tipo che identifica il servizio. Nell’override del metodo &lt;em&gt;OnOpening&lt;/em&gt;, eseguito prima dell’apertura dei channels, il servicehost si occupa di verificare l’esistenza dell’&lt;em&gt;UnityServiceBehavior&lt;/em&gt; e, se non trovato, lo istanzia passando a sua volta l’istanza del container.&lt;/p&gt;

&lt;h4&gt;Utilizzo in una applicazione console self-hosted&lt;/h4&gt;

&lt;p&gt;Ora siamo pronti per provare. Questa è la configurazione di esempio che utilizzeremo per il nostro servizio:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: &lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; &lt;span style="color:#0000ff;"&gt;?&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3:   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configSections&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;section&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;unity&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configSections&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6:   
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7:   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;unity&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;containers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;container&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;types&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:           
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Console.InnerBookService, DotNetSide.WCF.IoC.Console&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:                 &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;inner&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Console.IBookService, DotNetSide.WCF.IoC.Console&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:                 &lt;span style="color:#ff0000;"&gt;mapTo&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Console.BookService, DotNetSide.WCF.IoC.Console&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;typeConfig&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;constructor&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21:                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;innerService&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;parameterType&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;DotNetSide.WCF.IoC.Console.InnerBookService, DotNetSide.WCF.IoC.Console&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22:                   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;dependency&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;=&lt;span style="color:#0000ff;"&gt;&amp;quot;inner&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23:                 &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24:               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;constructor&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:             &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;typeConfig&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26:           &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28:         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;types&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 29:       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;container&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 30: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 31:     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;containers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 32:     
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 33:   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;unity&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 34: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 35: &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Molto semplicemente deve essere creata un’istanza dell’&lt;em&gt;InnerBookService&lt;/em&gt; e passata come parametro nel costruttore del nostro servizio &lt;em&gt;BookService&lt;/em&gt;, implementazione del nostro contratto &lt;em&gt;IBookService&lt;/em&gt;:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: [ServiceContract]
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IBookService
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3: {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4:     [OperationContract]
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5:     Book ReadBook(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; bookId);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8: &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; BookService : IBookService
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9: {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; InnerBookService innerService;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11: 
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; BookService(InnerBookService innerService)
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:     {
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14:         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.innerService = innerService;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Book ReadBook(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; bookId)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 19:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.innerService.ReadBook(bookId);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 20:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 21: }
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 22: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 23: &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; InnerBookService
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 24: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 25:     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Book ReadBook(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; bookId)
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 26:     {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 27:         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Book()
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 28:         {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 29:             Title = &amp;quot;&lt;span style="color:#8b0000;"&gt;WCF&lt;/span&gt;&amp;quot;,
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 30:             Description = &amp;quot;&lt;span style="color:#8b0000;"&gt;A book on Windows Communication Foundation&lt;/span&gt;&amp;quot;
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 31:         };
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 32:     }
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 33: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Costruiamo quindi l’istanza del ServiceHost passando il container UnityContainer:&lt;/p&gt;

&lt;pre style="border-bottom:#cecece 1px solid;border-left:#cecece 1px solid;padding-bottom:5px;background-color:#fbfbfb;min-height:40px;padding-left:5px;width:500px;padding-right:5px;overflow:auto;border-top:#cecece 1px solid;border-right:#cecece 1px solid;padding-top:5px;"&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  1: var unityContainer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityContainer();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  2: var configurationSection = (UnityConfigurationSection)ConfigurationManager.GetSection(&amp;quot;&lt;span style="color:#8b0000;"&gt;unity&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  3: configurationSection.Containers.Default.Configure(unityContainer);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  4: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  5: Uri serviceAddress = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&amp;quot;&lt;span style="color:#8b0000;"&gt;http://localhost:9001/BookService&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  6: Uri mexAddress = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&amp;quot;&lt;span style="color:#8b0000;"&gt;http://localhost:9001/BookService/mex&lt;/span&gt;&amp;quot;);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  7: &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (UnityServiceHost host = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; UnityServiceHost(unityContainer, unityContainer.Resolve&amp;lt;IBookService&amp;gt;().GetType()))
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  8: {
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt;  9:     host.Description.Behaviors.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ServiceMetadataBehavior());
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 10:     host.AddServiceEndpoint(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(IBookService), &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; BasicHttpBinding(), serviceAddress);
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 11:     host.AddServiceEndpoint(&lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), mexAddress);
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 12: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 13:     host.Open();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 14: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 15:     System.Console.Read();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 16: 
&lt;/pre&gt;&lt;pre style="background-color:#fbfbfb;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 17:     host.Close();
&lt;/pre&gt;&lt;pre style="background-color:#ffffff;margin:0em;width:100%;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;font-size:12px;"&gt; 18: }&lt;/pre&gt;&lt;/pre&gt;

&lt;p&gt;Abbiamo anche aggiunto un endpoint di tipo &lt;em&gt;WS-Metadata Exchange&lt;/em&gt;, per la creazione del quale abbiamo anche evitato di utilizzare l’IoC nel &lt;em&gt;UnityServiceBehavior&lt;/em&gt;, così possiamo anche creare il nostro client e testare il tutto.&lt;/p&gt;

&lt;p&gt;Davvero molto semplice, non credete ?? &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/p&gt;

&lt;p&gt;Nei prossimi post aggiungerò qualche tassello per rendere più completo il discorso, nel frattempo aspetto i vostri feedback.&lt;/p&gt;

&lt;p&gt;bye&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22050" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/WCF/default.aspx">WCF</category><category domain="http://dotnetside.org/blogs/fabio/archive/tags/IoC/default.aspx">IoC</category></item><item><title>Articolo su ioProgrammo n° 137</title><link>http://dotnetside.org/blogs/fabio/archive/2009/03/20/articolo-su-ioprogrammo-n-176-137.aspx</link><pubDate>Fri, 20 Mar 2009 21:49:26 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22048</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22048</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/03/20/articolo-su-ioprogrammo-n-176-137.aspx#comments</comments><description>&lt;p&gt;Su ioProgrammo di Aprile è stato pubblicato un mio articolo che descrive come utilizzare Workflow Foundation per gestire uno scheduler completamente personalizzato ma soprattutto facilmente estendendibile.&lt;/p&gt; &lt;p&gt;Magari, se lo leggete, fatemi sapere che ne pensate ... &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22048" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Articoli/default.aspx">Articoli</category></item><item><title>Windows 7 Installation Fest SOLD OUT</title><link>http://dotnetside.org/blogs/fabio/archive/2009/03/15/windows-7-installation-fest-sold-out.aspx</link><pubDate>Sun, 15 Mar 2009 16:04:33 GMT</pubDate><guid isPermaLink="false">2d5e8256-a19a-4586-a65e-031f7ebe8345:22032</guid><dc:creator>Fabio.Cozzolino</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://dotnetside.org/blogs/fabio/rsscomments.aspx?PostID=22032</wfw:commentRss><comments>http://dotnetside.org/blogs/fabio/archive/2009/03/15/windows-7-installation-fest-sold-out.aspx#comments</comments><description>&lt;p&gt;Sarà forse l&amp;#39;attesa del nuovo sistema operativo, sarà forse la curiosità che c&amp;#39;è dietro, sarà forse la primavera, fatto sta che &lt;a href="http://dotnetside.org/content/Win7InstallationFest.aspx" target="_blank"&gt;l&amp;#39;installation fest del 26 Marzo a Bari&lt;/a&gt; è già SOLD OUT. Tutti i posti sono prenotati &lt;img src="http://dotnetside.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;.&lt;/p&gt; &lt;p&gt;Se però già sapete di non poter partecipare, vi chiedo di liberare il posto già prenotato così da consentire la partecipazione a chi è in attesa. &lt;/p&gt; &lt;p&gt;Grazie, ci vediamo il 26!!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetside.org/aggbug.aspx?PostID=22032" width="1" height="1"&gt;</description><category domain="http://dotnetside.org/blogs/fabio/archive/tags/Eventi/default.aspx">Eventi</category></item></channel></rss>
