<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Castle</title>
        <link>http://blogs.ugidotnet.org/rgm/category/Castle.aspx</link>
        <description>Castle</description>
        <language>it-IT</language>
        <copyright>Gian Maria  Ricci</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Integrare Castle Windsor con Wcf a costo zero.</title>
            <link>http://blogs.ugidotnet.org/rgm/archive/2009/04/27/integrare-castle-windsor-con-wcf-a-costo-zero.aspx</link>
            <description>&lt;p&gt;Castle Windsor è senza dubbio uno dei motori di inversione di controllo più gettonati. L’aspetto interessante è che al suo interno si trovano molte estensioni, chiamate generalmente Facility, per gestire gli scenari più comuni. Stamane mi è capitato di usare &lt;a href="http://www.castleproject.org/container/facilities/trunk/wcf/index.html"&gt;l’integrazione con WCF&lt;/a&gt;. In pratica si tratta di una estensione che ci permette di risolvere i servizi con un WindsorContainer. &lt;/p&gt;  &lt;p&gt;Questa funzionalità è decisamente interessante, dato che in questo modo si risolvono tutti i problemi di dipendenza tra i vari servizi e tra i servizi e componenti esterni. Grazie ad un motore di inversione di controllo come Windsor si possono configurare i servizi in maniera estremamente flessibile. Ad esempio consideriamo il seguente servizio&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:f9c7de8a-4e85-40dc-8919-73dcad10cd06" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;   &lt;pre style="overflow: auto; background-color: #ffffff; word-wrap: break-word"&gt;&lt;span style="color: #000000"&gt;[ServiceContract]
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt; IKernel
{
 [OperationContract(Name &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Test&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;)]
 Int32 Test();&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Implementato dalla seguente classe&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:850e6bbc-5370-4959-822c-04d8dc3ede68" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;
  &lt;pre style="overflow: auto; background-color: #ffffff; word-wrap: break-word"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt; Kernel : IKernel 
{
   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; Int32 TestValue { &lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;; }

   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&lt;span style="color: #000000"&gt; IKernel Members&lt;/span&gt;&lt;span style="color: #000000"&gt;

   &lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt; Int32 Test()
   {
      &lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; TestValue;
   }&lt;/span&gt;&lt;/pre&gt;
&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;Come si può vedere la classe dipende dal parametro TestValue, in questo caso basta configurare il tutto con castle.&lt;/p&gt;

&lt;p /&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9a40fb4f-17b6-491e-a90d-f7b063b667a6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&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: #FF0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="http://www.tigraine.at/windsor-configuration.xsd"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;components&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;component &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Kernel"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; service&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Test.Services.Interfaces.IKernel, Test.Services.Interfaces"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
                 type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Test.Services.Impl.Kernel, Test.Services.Impl"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
         &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;TestValue&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;42&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;TestValue&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
         &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;component&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;components&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;

   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;facilities&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;facility
          &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="CastleWcfItegration"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;
          type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Castle.Facilities.WcfIntegration.WcfFacility, Castle.Facilities.WcfIntegration"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;facility&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;facilities&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;
   
&lt;/span&gt;&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;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;La particolarità è che si è specificata la facility di CastleWcfIntegration, in questo modo si può hostare un servizio con il custom Host definito nella facility&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2ec2bfa8-9e70-49ad-a9b2-e2e4027f6908" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:#FFFFFF;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;"&gt;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DefaultServiceHost host &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DefaultServiceHost)&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; DefaultServiceHostFactory().CreateServiceHost(
   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(IKernel).AssemblyQualifiedName, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Uri[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;]))
{
    Uri serviceAddress &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Uri(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://localhost:7601/Kernel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
    Uri serviceMexAddress &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Uri(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://localhost:7601/Kernel/mex&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
    host.Description.Behaviors.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ServiceMetadataBehavior());
    host.AddServiceEndpoint(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Test.Services.Interfaces.IKernel), &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; BasicHttpBinding(), serviceAddress);
    host.AddServiceEndpoint(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), serviceMexAddress);
   
   host.Open();
   Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Host started&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);
   System.Console.ReadKey();
}&lt;/span&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;

&lt;p&gt;L’unica differenza con gli esempi standard di WCF è che in questo caso l’host è di tipo DefaultServiceHost, definito in Castle.Facilities.WcfIntegration. Se lanciate il programma e provate ad invocare il servizio con il WcfTestClient potrete notare che il valore di ritorno del metodo Test è 42, ovvero il nostro servizio è stato risolto in maniera completamente automatica da Castle.&lt;/p&gt;

&lt;p&gt;Alk.&lt;/p&gt;

&lt;p&gt;Tags: &lt;a href="http://technorati.com/tag/Castle Windsor" rel="tag"&gt;Castle Windsor&lt;/a&gt; &lt;a href="http://technorati.com/tag/Wcf" rel="tag"&gt;Wcf&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/96053.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gian Maria  Ricci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rgm/archive/2009/04/27/integrare-castle-windsor-con-wcf-a-costo-zero.aspx</guid>
            <pubDate>Mon, 27 Apr 2009 14:01:02 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rgm/archive/2009/04/27/integrare-castle-windsor-con-wcf-a-costo-zero.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/96053.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/96053.aspx</trackback:ping>
        </item>
        <item>
            <title>Castle Vs Spring Override delle properties</title>
            <link>http://blogs.ugidotnet.org/rgm/archive/2007/08/03/87238.aspx</link>
            <description>Una delle funzionalità di Castle.Windsor che non ho trovato su spring, e si fa anche un po fatica a simularla, è la possibilità di fare un override delle proprietà di un oggetto. In questo post viene mostrato come windsor permetta di iniettare manualmente a runtime le dipendenze degli oggetti.&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/87238.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gian Maria  Ricci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rgm/archive/2007/08/03/87238.aspx</guid>
            <pubDate>Fri, 03 Aug 2007 09:12:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rgm/archive/2007/08/03/87238.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/87238.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/87238.aspx</trackback:ping>
        </item>
        <item>
            <title>Castle Windsor - Facilities</title>
            <link>http://blogs.ugidotnet.org/rgm/archive/2007/08/01/87165.aspx</link>
            <description>Esempio di facility per configurare runtime un contenitore di IoC di Castle.Windsor.&lt;img src="http://blogs.ugidotnet.org/rgm/aggbug/87165.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gian Maria  Ricci</dc:creator>
            <guid>http://blogs.ugidotnet.org/rgm/archive/2007/08/01/87165.aspx</guid>
            <pubDate>Wed, 01 Aug 2007 23:23:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/rgm/archive/2007/08/01/87165.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/rgm/comments/commentRss/87165.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/rgm/services/trackbacks/87165.aspx</trackback:ping>
        </item>
    </channel>
</rss>