<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetslackers.com/Community/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Antonio&amp;#39;s Blog</title><subtitle type="html">Around .NET </subtitle><id>http://dotnetslackers.com/Community/blogs/antrad/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnetslackers.com/Community/blogs/antrad/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.30415.43">Community Server</generator><updated>2008-07-01T17:13:00Z</updated><entry><title>GZip Encoder WCF XmlDictionaryReaderQuotas MaxStringContentLength 8192 Error</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2009/12/30/gzip-encoder-wcf-xmldictionaryreaderquotas-maxstringcontentlength-8192-error.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2009/12/30/gzip-encoder-wcf-xmldictionaryreaderquotas-maxstringcontentlength-8192-error.aspx</id><published>2009-12-29T21:03:00Z</published><updated>2009-12-29T21:03:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I used a MessageEncoder from Microsoft samples that you can find on this &lt;a target="_blank" title="GZIP WCF Message Encoding" href="http://msdn.microsoft.com/en-us/library/ms751458.aspx"&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But when i processed big message it didn&amp;#39;t work for an error similar to this:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The maximum string content length quota (8192) has been
exceeded while reading XML data. This quota may be increased by
changing the MaxStringContentLength property on the
XmlDictionaryReaderQuotas object used when creating the XML reader.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I found some solutions but every solutions doesn&amp;#39;t work, so I changed code for resolve problem:&lt;/p&gt;
&lt;p&gt;Go to file GZipMessageEncodingBindingElement in class GZipMessageEncodingBindingElement, find method ApplyConfiguration and change it as follow:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;//Called by the WCF to apply the configuration settings (the property above) to the binding element&lt;br /&gt;        public override void ApplyConfiguration(BindingElement bindingElement)&lt;br /&gt;        {&lt;br /&gt;            GZipMessageEncodingBindingElement binding = (GZipMessageEncodingBindingElement)bindingElement;&lt;br /&gt;            PropertyInformationCollection propertyInfo = this.ElementInformation.Properties;&lt;br /&gt;            if (propertyInfo[&amp;quot;innerMessageEncoding&amp;quot;].ValueOrigin != PropertyValueOrigin.Default)&lt;br /&gt;            {&lt;br /&gt;                switch (this.InnerMessageEncoding)&lt;br /&gt;                {&lt;br /&gt;                    case &amp;quot;textMessageEncoding&amp;quot;:&lt;br /&gt;                        TextMessageEncodingBindingElement encoder = new TextMessageEncodingBindingElement();&lt;br /&gt;                        encoder.ReaderQuotas.MaxStringContentLength = int.MaxValue;&lt;br /&gt;                        binding.InnerMessageEncodingBindingElement = encoder;&lt;br /&gt;                        break;&lt;br /&gt;                    case &amp;quot;binaryMessageEncoding&amp;quot;:&lt;br /&gt;                        BinaryMessageEncodingBindingElement binEncoder = new BinaryMessageEncodingBindingElement();&lt;br /&gt;                        binEncoder.ReaderQuotas.MaxStringContentLength = int.MaxValue;&lt;br /&gt;                        binding.InnerMessageEncodingBindingElement = binEncoder;&lt;br /&gt;                        break;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;                TextMessageEncodingBindingElement encoder = new TextMessageEncodingBindingElement();&lt;br /&gt;                encoder.ReaderQuotas.MaxStringContentLength = int.MaxValue;&lt;br /&gt;                binding.InnerMessageEncodingBindingElement = encoder;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It works for text encoding and binary encoding.&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=34199" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="WCF" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/WCF/default.aspx" /></entry><entry><title>Setup of CruiseControl.NET with TFS 2005 under a 64bit server</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2009/03/23/setup-of-cruisecontrol-net-with-tfs-2005-under-a-64bit-server.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2009/03/23/setup-of-cruisecontrol-net-with-tfs-2005-under-a-64bit-server.aspx</id><published>2009-03-22T21:38:00Z</published><updated>2009-03-22T21:38:00Z</updated><content type="html">&lt;p&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;I installed CC.NET under TFS &lt;span class="kwrd"&gt;for&lt;/span&gt; enable build server &lt;span class="kwrd"&gt;for&lt;/span&gt; continuous integration. This &lt;span class="kwrd"&gt;is&lt;/span&gt; my experience…&lt;br /&gt;&lt;br /&gt;Used Tools:&lt;br /&gt;CruiseControl.NET (Versione 1.4.2.14) CC.NET &lt;br /&gt;Plugin per CC.NET per TFS (http:&lt;span class="rem"&gt;//www.codeplex.com/TFSCCNetPlugin)&lt;/span&gt;&lt;br /&gt;Client TFS Explorer TFS 2005 &lt;br /&gt;CC Tray (Client Windows &lt;span class="kwrd"&gt;for&lt;/span&gt; CC.NET)&lt;br /&gt;&lt;br /&gt;Download and install CC.NET (remember version info). Later download plug-&lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; TFS integration with CC.NET from Codeplex. The only operation required &lt;span class="kwrd"&gt;is&lt;/span&gt; copying DLL into CC.NET install folder (server). This tool manage getting latest version from TFS.&lt;br /&gt;Later we must change CC.NET configuration file.This &lt;span class="kwrd"&gt;is&lt;/span&gt; an example:&lt;br /&gt;&amp;lt;cruisecontrol xmlns:cb=&lt;span class="str"&gt;&amp;quot;urn:ccnet.config.builder&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;lt;project&amp;gt;&lt;br /&gt;   &amp;lt;name&amp;gt;Devenv project&amp;lt;/name&amp;gt; &lt;br /&gt;    &amp;lt;triggers&amp;gt;&lt;br /&gt;        &amp;lt;intervalTrigger seconds=&lt;span class="str"&gt;&amp;quot;60&amp;quot;&lt;/span&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;/triggers&amp;gt;&lt;br /&gt;    &amp;lt;modificationDelaySeconds&amp;gt;60&amp;lt;/modificationDelaySeconds&amp;gt;&lt;br /&gt;    &amp;lt;sourcecontrol type=&lt;span class="str"&gt;&amp;quot;vsts&amp;quot;&lt;/span&gt; autoGetSource=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; applyLabel=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;  &amp;lt;server&amp;gt;http:&lt;span class="rem"&gt;//tfsserver:8080&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;project&amp;gt;$/Casillo.SOA&amp;lt;/project&amp;gt;&lt;br /&gt;     &amp;lt;username&amp;gt;user&amp;lt;/username&amp;gt;&lt;br /&gt;         &amp;lt;password&amp;gt;password&amp;lt;/password&amp;gt;&lt;br /&gt;     &amp;lt;domain&amp;gt;mydomain&amp;lt;/domain&amp;gt;&lt;br /&gt;&amp;lt;/sourcecontrol&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;&amp;lt;/cruisecontrol&amp;gt;&lt;br /&gt;In the &amp;lt;sourcecontrol&amp;gt; section we indicate all information about connection to TFS. I used Reflector too because I wanted see all option of &lt;span class="kwrd"&gt;this&lt;/span&gt; DLL…it uses attributes &lt;span class="kwrd"&gt;for&lt;/span&gt; map informations.&lt;br /&gt;In my experience I used a 64bit server, &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;case&lt;/span&gt; we need to force CC.NET &lt;span class="kwrd"&gt;for&lt;/span&gt; to be execute &lt;span class="kwrd"&gt;in&lt;/span&gt; 32 bit context. We can &lt;span class="kwrd"&gt;do&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; command:&lt;br /&gt;corflags.exe 32bit+ ccnet.exe &lt;br /&gt;from VS 2008 command prompt.&lt;br /&gt;After we need to download TFS 2005 Cliente Explorer, because we will use some DLL &lt;span class="kwrd"&gt;for&lt;/span&gt; access to TFS. After unzip TFS 2005 client .img file (I used a freeware program called ExtractNow).&lt;br /&gt;Some DLL need to installed under GAC (gacutil /i  file.dll under VS command prompt):&lt;br /&gt;Microsoft.TeamFoundation.Client.dll&lt;br /&gt;Microsoft.TeamFoundation.Common.dll&lt;br /&gt;Microsoft.TeamFoundation.Common.Library.dll&lt;br /&gt;Microsoft.TeamFoundation.dll&lt;br /&gt;Microsoft.TeamFoundation.VersionControl.Client.dll&lt;br /&gt;Microsoft.TeamFoundation.VersionControl.Common.dll&lt;br /&gt;Microsoft.TeamFoundation.VersionControl.Common.Integration.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.Cache.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.DataStore.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.Provision.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Client.RuleEngine.dll&lt;br /&gt;Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll&lt;br /&gt;&lt;br /&gt;Now you can use CCTray client &lt;span class="kwrd"&gt;for&lt;/span&gt; connect to CC.NET. It will work &lt;span class="kwrd"&gt;if&lt;/span&gt; everything &lt;span class="kwrd"&gt;is&lt;/span&gt; ok. Now we need to configure CC.NET &lt;span class="kwrd"&gt;for&lt;/span&gt; build our projects. We can &lt;span class="kwrd"&gt;do&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt;  MSBuild, the official building tool from Microsoft used by Visual Studio (pay attention to correct version of MSBuild &lt;span class="kwrd"&gt;for&lt;/span&gt; .NET Framework  2.0,3.0 or 3.5).&lt;br /&gt;This  &lt;span class="kwrd"&gt;is&lt;/span&gt; a complete example from my experience:&lt;br /&gt;&amp;lt;project&amp;gt;&lt;br /&gt;    &amp;lt;name&amp;gt;Example1&amp;lt;/name&amp;gt;&lt;br /&gt;    &amp;lt;triggers&amp;gt;&lt;br /&gt;      &amp;lt;intervalTrigger seconds=&lt;span class="str"&gt;&amp;quot;240&amp;quot;&lt;/span&gt;/&amp;gt;&lt;br /&gt;    &amp;lt;/triggers&amp;gt;&lt;br /&gt;    &amp;lt;modificationDelaySeconds&amp;gt;120&amp;lt;/modificationDelaySeconds&amp;gt;&lt;br /&gt;    &amp;lt;sourcecontrol type=&lt;span class="str"&gt;&amp;quot;vsts&amp;quot;&lt;/span&gt; autoGetSource=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; applyLabel=&lt;span class="str"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&amp;gt;&lt;br /&gt;      &amp;lt;server&amp;gt;http:&lt;span class="rem"&gt;//tfs:8080&amp;lt;/server&amp;gt;&lt;/span&gt;&lt;br /&gt;      &amp;lt;project&amp;gt;$/CA.Example1&amp;lt;/project&amp;gt;&lt;br /&gt;      &amp;lt;username&amp;gt;user&amp;lt;/username&amp;gt;&lt;br /&gt;      &amp;lt;password&amp;gt;pwd&amp;lt;/password&amp;gt;&lt;br /&gt;      &amp;lt;domain&amp;gt;mydomain&amp;lt;/domain&amp;gt;&lt;br /&gt;      &amp;lt;workingDirectory&amp;gt;C:\WorkingDirectory\example1\&amp;lt;/workingDirectory&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/sourcecontrol&amp;gt;&lt;br /&gt;    &amp;lt;tasks&amp;gt;&lt;br /&gt;      &amp;lt;msbuild&amp;gt;&lt;br /&gt;        &amp;lt;executable&amp;gt;C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe&amp;lt;/executable&amp;gt;&lt;br /&gt;        &amp;lt;workingDirectory&amp;gt;C:\WorkingDirectory\example1workingDirectory&amp;gt;&lt;br /&gt;        &amp;lt;projectFile&amp;gt;Example1.sln&amp;lt;/projectFile&amp;gt;&lt;br /&gt;        &amp;lt;buildArgs&amp;gt; /p:Configuration=Debug&amp;lt;/buildArgs&amp;gt;&lt;br /&gt;        &amp;lt;targets&amp;gt;Build&amp;lt;/targets&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;/msbuild&amp;gt;&lt;br /&gt;    &amp;lt;/tasks&amp;gt;&lt;br /&gt;    &amp;lt;publishers&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/publishers&amp;gt;&lt;br /&gt;  &amp;lt;/project&amp;gt;&lt;br /&gt;&lt;br /&gt;I used to build debug configuration and no prebuild or post build task.CC.NET support post build tasks and some other things, you can &lt;span class="kwrd"&gt;do&lt;/span&gt; the same with VS pre build and post build tasks &lt;span class="kwrd"&gt;if&lt;/span&gt; you want.&lt;br /&gt;Have fun!&lt;br /&gt;Antonio&lt;br /&gt;&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=31056" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="CruiseControl.NET TFS Agile" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/CruiseControl.NET+TFS+Agile/default.aspx" /></entry><entry><title>Using VS on big projects</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2009/02/16/using-vs-on-big-projects.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2009/02/16/using-vs-on-big-projects.aspx</id><published>2009-02-15T22:44:00Z</published><updated>2009-02-15T22:44:00Z</updated><content type="html">&lt;p&gt;I am working on a very large and complex project on a 64bit workstation, I had several problem with Visual Studio at first. I found some tips that I want to share...First of all if you don&amp;#39;t need too many features you can start vs in safe mode:&lt;/p&gt;
&lt;p&gt;devenv&amp;nbsp;/safemode&lt;/p&gt;
&lt;p&gt;in VS command prompt (working on services with WCF this is ok). I disable Resharper too...:(&lt;/p&gt;
&lt;p&gt;Later you can use this hack (you can find more in info in &lt;a target="_blank" href="http://stevenharman.net/blog/archive/2008/04/29/hacking-visual-studio-to-use-more-than-2gigabytes-of-memory.aspx"&gt;Steve Herman&amp;#39;s Blog&lt;/a&gt;) for improve Visual Studio memory.&lt;/p&gt;
&lt;p&gt;This is the procedure:&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Windows XP: Backup the boot.ini file and then put the /3GB switch in your boot.ini. (more information on the /3GB option)&lt;/p&gt;
&lt;p&gt;Vista: run the following from the Visual Studio command prompt (Brad Rutkowski has the full scoop):&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; 1: &amp;nbsp;BCDEDIT /Set IncreaseUserVa 3072&lt;/p&gt;
&lt;p&gt;If you are on a 64bit pc this step are not required.&lt;/p&gt;
&lt;p&gt;Using the Visual Studio command prompt, navigate to C:\Program Files\Microsoft Visual Studio 9\Common7\IDE\&lt;/p&gt;
&lt;p&gt;execute the following command:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; 1: &amp;nbsp;editbin /LARGEADDRESSAWARE devenv.exe&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bye&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=30672" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="Visual Studio" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Introduction to TDD,IOC and AOP</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/12/26/introduction-to-tdd-ioc-and-aop.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/12/26/introduction-to-tdd-ioc-and-aop.aspx</id><published>2008-12-26T13:17:00Z</published><updated>2008-12-26T13:17:00Z</updated><content type="html">&lt;p&gt;Some other &lt;a href="http://www.slideshare.net/antrad1978" target="_blank"&gt;slides &lt;/a&gt;about other hot topics in ALTNET Community.&lt;/p&gt;
&lt;p&gt;Bye&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=30335" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="ALTNET IOC TDD AOP" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/ALTNET+IOC+TDD+AOP/default.aspx" /></entry><entry><title>Slides about DDD and ALTNET</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/12/23/slides-about-ddd-and-altnet.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/12/23/slides-about-ddd-and-altnet.aspx</id><published>2008-12-23T09:32:00Z</published><updated>2008-12-23T09:32:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;I was speaker in an internal event in my new company (&lt;a target="_blank" href="http://www.codearchitects.com" title="CodeArchitects" class="null"&gt;CodeArchitects&lt;/a&gt;). We discussed about DDD and ALTNET philosophy.&lt;/p&gt;
&lt;p&gt;I posted slides on &lt;a target="_blank" href="http://www.slideshare.net/antrad1978" class="null"&gt;slideshare.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=30316" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="DDD ALTNET CodeArchitects" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/DDD+ALTNET+CodeArchitects/default.aspx" /></entry><entry><title>About SQL Server MCTS exam</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/11/03/about-sql-server-mcts-exam.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/11/03/about-sql-server-mcts-exam.aspx</id><published>2008-11-03T11:48:00Z</published><updated>2008-11-03T11:48:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;Friday I passed exam 70-431 about SQL Server 2005. It was a long exam and different by .NET exams. In fact there are 35 questions and it is not important for final evaluation, I am not sure but it is useful only for to be ready for performace evaluation. Performance evalution is based on 12 simulations. You must resolve simulations with SSMS and arguments are about backups,Linked Servers,triggers,query,CLR Assembly...&lt;/p&gt;
&lt;p&gt;If you need more info about contact me.&lt;/p&gt;
&lt;p&gt;Tonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29760" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="SQL Server" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/SQL+Server/default.aspx" /></entry><entry><title>About Repository pattern and Nhibernate</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/25/about-repository-pattern-and-nhibernate.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/25/about-repository-pattern-and-nhibernate.aspx</id><published>2008-10-25T08:51:00Z</published><updated>2008-10-25T08:51:00Z</updated><content type="html">&lt;p&gt;I am working on a new project for an intranet application. I am using NHibernate and DDD. I created a simple Repository structure...It user Windsor IOC container for instance repository (of course you can implement your with LINQToSQL or a Fake repository for testing). This is interface and implementation:&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Jobbing.DAL.Repository&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;//Repository Interface&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IRepository&amp;lt;T&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Save(T obj);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Update(T obj);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Delete(T obj);&lt;br /&gt;        T Load&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; id);&lt;br /&gt;        T GetReference&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; id);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; DeleteAll(IList&amp;lt;T&amp;gt; objs);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateAll(IList&amp;lt;T&amp;gt; objs);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; InsertAll(IList&amp;lt;T&amp;gt; objs);&lt;br /&gt;        IList&amp;lt;T&amp;gt; GetAll&amp;lt;T&amp;gt;();&lt;br /&gt;        IList&amp;lt;T&amp;gt; GetAllOrdered&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName,&lt;span class="kwrd"&gt;bool&lt;/span&gt; Ascending);&lt;br /&gt;        IList&amp;lt;T&amp;gt; Find&amp;lt;T&amp;gt;(IList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; criteria);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Detach(T item);&lt;br /&gt;        IList&amp;lt;T&amp;gt; GetAll&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; pageIndex, &lt;span class="kwrd"&gt;int&lt;/span&gt; pageSize);&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Commit();&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; Rollback();&lt;br /&gt;        &lt;span class="kwrd"&gt;void&lt;/span&gt; BeginTransaction();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;//Implementation of NHibernate Repository&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Expression;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Engine.Query;&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NHibernate.Mapping;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Jobbing.DAL.Repository&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NHibernateRepository&amp;lt;T&amp;gt; : IRepository&amp;lt;T&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; ISession session;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; NHibernateRepository()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;//session = NHibernateHelper.GetCurrentSession();&lt;/span&gt;&lt;br /&gt;            session = NHibernateSessionManager.Instance.GetSession();&lt;br /&gt;            session.BeginTransaction();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IRepository&amp;lt;T&amp;gt; Members&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Save(T obj)&lt;br /&gt;        {&lt;br /&gt;            session.Save(obj);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Update(T obj)&lt;br /&gt;        {&lt;br /&gt;            session.Update(obj);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Delete(T obj)&lt;br /&gt;        {&lt;br /&gt;            session.Delete(obj);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; T Load&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; session.Load&amp;lt;T&amp;gt;(id);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; T GetReference&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; id)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; session.Get&amp;lt;T&amp;gt;(id);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DeleteAll(IList&amp;lt;T&amp;gt; objs)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (Int32 I = 0; I &amp;lt; objs.Count; ++I)&lt;br /&gt;            {&lt;br /&gt;                Delete(objs&lt;img src="http://dotnetslackers.com/Community/emoticons/emotion-55.gif" alt="Idea" /&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateAll(IList&amp;lt;T&amp;gt; objs)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (Int32 I = 0; I &amp;lt; objs.Count; ++I)&lt;br /&gt;            {&lt;br /&gt;                Update(objs&lt;img src="http://dotnetslackers.com/Community/emoticons/emotion-55.gif" alt="Idea" /&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; InsertAll(IList&amp;lt;T&amp;gt; objs)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (Int32 I = 0; I &amp;lt; objs.Count; ++I)&lt;br /&gt;            {&lt;br /&gt;                Save(objs&lt;img src="http://dotnetslackers.com/Community/emoticons/emotion-55.gif" alt="Idea" /&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Detach(T item)&lt;br /&gt;        {&lt;br /&gt;            session.Evict(item);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Flush()&lt;br /&gt;        {&lt;br /&gt;            session.Flush();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IList&amp;lt;T&amp;gt; GetAll&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; pageIndex, &lt;span class="kwrd"&gt;int&lt;/span&gt; pageSize)&lt;br /&gt;        {&lt;br /&gt;            ICriteria criteria = session.CreateCriteria(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T));&lt;br /&gt;            criteria.SetFirstResult(pageIndex * pageSize);&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (pageSize &amp;gt; 0)&lt;br /&gt;            {&lt;br /&gt;                criteria.SetMaxResults(pageSize);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; criteria.List&amp;lt;T&amp;gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IList&amp;lt;T&amp;gt; GetAll&amp;lt;T&amp;gt;()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; GetAll&amp;lt;T&amp;gt;(0, 0);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IList&amp;lt;T&amp;gt; Find&amp;lt;T&amp;gt;(IList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; strs)&lt;br /&gt;        {&lt;br /&gt;            System.Collections.Generic.IList&amp;lt;ICriterion&amp;gt; objs = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Collections.Generic.List&amp;lt;ICriterion&amp;gt;();&lt;br /&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; strs){&lt;br /&gt;                ICriterion cr1 = Expression.Sql(s);&lt;br /&gt;                objs.Add(cr1);&lt;br /&gt;            }&lt;br /&gt;            ICriteria criteria = session.CreateCriteria(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T));&lt;br /&gt;            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (ICriterion rest &lt;span class="kwrd"&gt;in&lt;/span&gt; objs)&lt;br /&gt;                session.CreateCriteria(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T)).Add(rest);&lt;br /&gt;&lt;br /&gt;            criteria.SetFirstResult(0);&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; criteria.List&amp;lt;T&amp;gt;();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//public IList&amp;lt;T&amp;gt; GetByCriteria&amp;lt;T&amp;gt;(IList&amp;lt;ICriterion&amp;gt; objs, int pageIndex, int pageSize)&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    ICriteria criteria = session.CreateCriteria(typeof(T));&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    foreach (ICriterion rest in objs)&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//        session.CreateCriteria(typeof(T)).Add(rest);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    criteria.SetFirstResult(pageIndex * pageSize);&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    if (pageSize &amp;gt; 0)&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    {&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//        criteria.SetMaxResults(pageSize);&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    }&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    return criteria.List&amp;lt;T&amp;gt;();&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//public IList&amp;lt;T&amp;gt; GetByCriteria&amp;lt;T&amp;gt;(IList&amp;lt;ICriterion&amp;gt; objs)&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//    return this.GetByCriteria&amp;lt;T&amp;gt;(objs, 0, 0);&lt;/span&gt;&lt;br /&gt;        &lt;span class="rem"&gt;//}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Commit()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (session.Transaction.IsActive)&lt;br /&gt;            {&lt;br /&gt;                session.Transaction.Commit();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Rollback()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (session.Transaction.IsActive)&lt;br /&gt;            {&lt;br /&gt;                session.Transaction.Rollback();&lt;br /&gt;                session.Clear();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BeginTransaction()&lt;br /&gt;        {&lt;br /&gt;            Rollback();&lt;br /&gt;            session.BeginTransaction();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IRepository&amp;lt;T&amp;gt; Members&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; IList&amp;lt;T&amp;gt; GetAllOrdered&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; propertyName, &lt;span class="kwrd"&gt;bool&lt;/span&gt; Ascending)&lt;br /&gt;        {&lt;br /&gt;            Order cr1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; Order(propertyName, Ascending);&lt;br /&gt;            IList&amp;lt;T&amp;gt; objsResult = session.CreateCriteria(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(T)).AddOrder(cr1).List&amp;lt;T&amp;gt;();&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; objsResult;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;On CodeProject you can find more info about helper for NHibernate and module for Open-Session-In-View.&lt;br /&gt;Bye&lt;br /&gt;Antonio&lt;br /&gt;&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29637" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="DDD" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/DDD/default.aspx" /></entry><entry><title>Head First Design Patterns: Template Method</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/08/head-first-design-patterns-template-method.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/08/head-first-design-patterns-template-method.aspx</id><published>2008-10-08T15:20:00Z</published><updated>2008-10-08T15:20:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;Template Method...here it is:&lt;/p&gt;
&lt;p&gt;Defines the skeleton of an algorithm, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorith without changing the algorithm&amp;#39;s structure.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TemplateMethod
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Abstract class&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CaffeineBeverageWithHook
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; prepareRecipe()
        {
            boilWater();
            braw();
            pourInCup();
            addCondiments();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; braw();
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; addCondiments();

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; boilWater()
        {
            System.Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Boiling water...&amp;quot;&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; pourInCup()
        {
            System.Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Pouring into cup...&amp;quot;&lt;/span&gt;);
        }
    }
}


&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; TemplateMethod
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Concrete class&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CoffeeWithHook : CaffeineBeverageWithHook
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; braw()
        {
            System.Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Dripping Coffee through filter...&amp;quot;&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; addCondiments()
        {
            System.Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Adding sugar and milk...&amp;quot;&lt;/span&gt;);
        }
    }
}


&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; TemplateMethod;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; test
{
    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program
    {
        &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args)
        {
            CaffeineBeverageWithHook obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; CoffeeWithHook();
            obj.prepareRecipe();
            System.Console.ReadLine();
        }
    }
}

Bye
Antonio&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29426" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author></entry><entry><title>Silverlight free controls</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/03/silverlight-free-controls.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/03/silverlight-free-controls.aspx</id><published>2008-10-03T10:46:00Z</published><updated>2008-10-03T10:46:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;I am not a fun of client side tecnology but Silverlight is really interesting. &lt;a target="_blank" href="http://www.webresourcesdepot.com/free-silverlight-controls-and-tools-for-brighter-websites/" class="null"&gt;Here&lt;/a&gt; you can find some free controls.&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29297" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author></entry><entry><title>Head First Design Patterns: Command Pattern</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/02/head-first-design-patterns-command-pattern.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/10/02/head-first-design-patterns-command-pattern.aspx</id><published>2008-10-02T12:03:00Z</published><updated>2008-10-02T12:03:00Z</updated><content type="html">&lt;p&gt;Again Desgin Patterns...&lt;/p&gt;
&lt;p&gt;Command Pattern:Encapsulate a request as an object, thereby letting you parametrize clients with different requests,queue,or log requests, and support undoable operations.&lt;/p&gt;
&lt;p&gt;Command Pattern in&amp;nbsp;C#:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Command interface&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ICommand
    {
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute();
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="rem"&gt;//Concrete Command&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LightOffCommand : ICommand
    {

        &lt;span class="preproc"&gt;#region&lt;/span&gt; ICommand Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute()
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The method or operation is not implemented.&amp;quot;&lt;/span&gt;);
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Concrete Command&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LightOnCommand : ICommand
    {
        Light lg;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; LightOnCommand(Light my)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.lg = my;
        }
        &lt;span class="preproc"&gt;#region&lt;/span&gt; ICommand Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute()
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.lg.On();
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }
}


&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Null command, concrete command&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; NoCommand : ICommand
    {
        &lt;span class="preproc"&gt;#region&lt;/span&gt; ICommand Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Execute()
        {
            System.Console.WriteLine(&lt;span class="str"&gt;&amp;quot;No command&amp;quot;&lt;/span&gt;);
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="rem"&gt;//Receiver&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Light
    {
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _DescLight=&lt;span class="str"&gt;&amp;quot;Light&amp;quot;&lt;/span&gt;;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; DescLight
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _DescLight; }
            set { _DescLight = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; Light(&lt;span class="kwrd"&gt;string&lt;/span&gt; place)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._DescLight = place;
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; On()
        {
            System.Console.WriteLine(&lt;span class="kwrd"&gt;this&lt;/span&gt;.DescLight + &lt;span class="str"&gt;&amp;quot; is ON.&amp;quot;&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Off()
        {
            System.Console.WriteLine(&lt;span class="kwrd"&gt;this&lt;/span&gt;.DescLight + &lt;span class="str"&gt;&amp;quot; is OFF.&amp;quot;&lt;/span&gt;);
        }
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Command
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Invoker&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; RemoteControl
    {
        ICommand[] onCommands;
        ICommand[] offCommands;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; RemoteControl()
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.onCommands = &lt;span class="kwrd"&gt;new&lt;/span&gt; ICommand[7];
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.offCommands = &lt;span class="kwrd"&gt;new&lt;/span&gt; ICommand[7];
            &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;int&lt;/span&gt; i=0;i&amp;lt;7;i++){
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.offCommands&lt;img src="http://dotnetslackers.com/Community/emoticons/emotion-55.gif" alt="Idea" /&gt; = &lt;span class="kwrd"&gt;new&lt;/span&gt; NoCommand();
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.offCommands&lt;img src="http://dotnetslackers.com/Community/emoticons/emotion-55.gif" alt="Idea" /&gt; = &lt;span class="kwrd"&gt;new&lt;/span&gt; NoCommand();
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; stCommand(&lt;span class="kwrd"&gt;int&lt;/span&gt; slot, ICommand on,ICommand off)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.onCommands[slot]=on;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.offCommands[slot]=off;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; onButtonPushed(&lt;span class="kwrd"&gt;int&lt;/span&gt; slot)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.onCommands[slot].Execute();
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; offButtonPushed(&lt;span class="kwrd"&gt;int&lt;/span&gt; slot)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.offCommands[slot].Execute();
        }
    }
}

Bye 
Antonio&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29282" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="Design Patterns" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/Design+Patterns/default.aspx" /></entry><entry><title>Head First Design Pattern :Decorator</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/09/29/head-first-desgin-pattern-decorator.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/09/29/head-first-desgin-pattern-decorator.aspx</id><published>2008-09-29T10:14:00Z</published><updated>2008-09-29T10:14:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;This is C# code for Decorator. For more info see into book...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Base abstract class&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Decorator
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Base class for Beverage. It represents the Component&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Beverage
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; _Description;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Description
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _Description; }
            set { _Description = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; CalculateCost();
    }
}

&lt;span class="rem"&gt;//Concrete class&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Decorator
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Concrete class for Component&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Coffee : Decorator.Beverage
    {
        
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt;  CalculateCost()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; 1;
        }
    }
}

&lt;span class="rem"&gt;//Base abstract class for decorator&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Decorator
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Class for Decorator&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CondimentDecorator : Decorator.Beverage
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Description
        {
            get;
            set;
        }
    }
}

&lt;span class="rem"&gt;//Decorator concrete class&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Decorator
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Concrete decorator&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Mocha : Decorator.CondimentDecorator
    {
        Beverage bev;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; Mocha(Beverage b)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.bev = b;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; CalculateCost()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.bev.CalculateCost() +0.20;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Description
        {
            get
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Mocha&amp;quot;&lt;/span&gt;;
            }
            set
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The method or operation is not implemented.&amp;quot;&lt;/span&gt;);
            }
        }
    }
}

Bye
Antonio&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29213" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="Design Patterns" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/Design+Patterns/default.aspx" /></entry><entry><title>Head First Design Patterns: Observer Pattern</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/09/29/head-first-design-patterns-observer-and-decorator-pattern.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/09/29/head-first-design-patterns-observer-and-decorator-pattern.aspx</id><published>2008-09-29T09:52:00Z</published><updated>2008-09-29T09:52:00Z</updated><content type="html">&lt;p&gt;I am reading&amp;nbsp;this &lt;a target="_blank" href="http://www.amazon.com/Head-First-Design-Patterns/dp/0596007124/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1222682037&amp;amp;sr=8-1" class="null"&gt;book&lt;/a&gt; and it is very useful for repeat GOF Design&amp;nbsp;Patterns.&amp;nbsp;But I found that source code is Java. But we prefer C# :P...&lt;/p&gt;
&lt;p&gt;So I will implement all main patterns in C#...&lt;/p&gt;
&lt;p&gt;I post here code about Observer:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;&lt;font size="2" color="#0000ff"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;//Subject&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Observer
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ISubject
    {
        &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterObserver(IObserver o);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveObserver(IObserver o);
        &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyObservers();
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Observer
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IObserver
    {
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Update(&lt;span class="kwrd"&gt;double&lt;/span&gt; temp, &lt;span class="kwrd"&gt;double&lt;/span&gt; humidity, &lt;span class="kwrd"&gt;double&lt;/span&gt; preasure);
    }
}

&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Observer
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IDisplay
    {
        &lt;span class="kwrd"&gt;void&lt;/span&gt; Dispay();
    }
}

&lt;span class="rem"&gt;//Subject Code&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Observer
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; WeatherData : ISubject
    {
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _humidity;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Humidity
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _humidity; }
            set { _humidity = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _preassure;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Preassure
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _preassure; }
            set { _preassure = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _temperature;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; Temperature
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _temperature; }
            set { _temperature = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }
        }

        &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span class="rem"&gt;/// Observers&lt;/span&gt;
        &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
        System.Collections.Generic.IList&amp;lt;IObserver&amp;gt; objs = &lt;span class="kwrd"&gt;new&lt;/span&gt; System.Collections.Generic.List&amp;lt;IObserver&amp;gt;();
        &lt;span class="preproc"&gt;#region&lt;/span&gt; ISubject Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RegisterObserver(IObserver o)
        {
            objs.Add(o);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RemoveObserver(IObserver o)
        {
            objs.Remove(o);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyObservers()
        {
            &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (IObserver obj &lt;span class="kwrd"&gt;in&lt;/span&gt; objs)
                obj.Update(&lt;span class="kwrd"&gt;this&lt;/span&gt;._temperature, &lt;span class="kwrd"&gt;this&lt;/span&gt;._humidity, &lt;span class="kwrd"&gt;this&lt;/span&gt;._preassure);
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }
}

&lt;span class="rem"&gt;//Observer code&lt;/span&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Observer
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CurrentDispaly : IObserver,IDisplay
    {
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _humidity;
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _preassure;
        &lt;span class="kwrd"&gt;double&lt;/span&gt; _temperature;
        ISubject subject;

        &lt;span class="kwrd"&gt;public&lt;/span&gt; CurrentDispaly(ISubject sub)
        {
            &lt;span class="rem"&gt;//Istanzia l&amp;#39;oggetto e lo aggiunge come Observer&lt;/span&gt;
            subject = sub;
            subject.RegisterObserver(&lt;span class="kwrd"&gt;this&lt;/span&gt;);
        }
        &lt;span class="preproc"&gt;#region&lt;/span&gt; IObserver Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Update(&lt;span class="kwrd"&gt;double&lt;/span&gt; temp, &lt;span class="kwrd"&gt;double&lt;/span&gt; humidity, &lt;span class="kwrd"&gt;double&lt;/span&gt; preasure)
        {
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._temperature = temp;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._preassure = preasure;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;._humidity = humidity;
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.Dispay();
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;

        &lt;span class="preproc"&gt;#region&lt;/span&gt; IDisplay Members

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Dispay()
        {
            System.Console.WriteLine(&lt;span class="kwrd"&gt;this&lt;/span&gt;._humidity + &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;._preassure + &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;._temperature);
        }

        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;
    }
}&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;
Bye&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;Antonio&lt;/pre&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=29212" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="Design Patterns" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/Design+Patterns/default.aspx" /></entry><entry><title>Thank you uCertify</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/21/thank-you-ucertify.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/21/thank-you-ucertify.aspx</id><published>2008-07-21T14:17:00Z</published><updated>2008-07-21T14:17:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;Last week I passed exam 70-529. I passed with 953/1000 at first attempt. I used &lt;a target="_blank" href="http://www.ucertify.com/exams/Microsoft/70-529-CSHARP.html" class="null"&gt;uCertify training kit&lt;/a&gt;. This training kit was really useful with a lot of questions and reviews, simulations and practices. It contains MSDN tips too. I used some other demo versions but I decided to&amp;nbsp;choose and buy&amp;nbsp;uCertify because it was the best one.&lt;/p&gt;
&lt;p&gt;Thank you&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=27943" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term=".NET Certifications" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/.NET+Certifications/default.aspx" /></entry><entry><title>Calculate file hash</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/17/calculate-file-hash.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/17/calculate-file-hash.aspx</id><published>2008-07-17T10:02:00Z</published><updated>2008-07-17T10:02:00Z</updated><content type="html">&lt;p&gt;A little code snippet for calculte file hash:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;&lt;span style="color:#0000ff;font-size:x-small;"&gt;
&lt;p&gt;public &lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; CalculateHash(&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; file)
&lt;p&gt;{&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;try&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;MD5&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; obj = &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;MD5&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Create();&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;byte&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;[] bytes;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;using&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;FileStream&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; fs = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;FileStream&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(file, &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;FileMode&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Open, &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;FileAccess&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.Read, &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;FileShare&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.ReadWrite))
&lt;p&gt;{&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; index = 0;&lt;span style="font-size:x-small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;long&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; fileLength = fs.Length;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (fileLength &amp;gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;Int32&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;.MaxValue)&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;throw&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;IOException&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;color:#800000;"&gt;&amp;quot;File too long&amp;quot;&lt;/span&gt; &lt;span style="font-size:x-small;"&gt;);&lt;span style="font-size:x-small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; count = (&lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;)fileLength;&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;bytes =&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;byte&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;[count];&lt;font size="2"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;while&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(count &amp;gt; 0)
&lt;p&gt;{&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; n = fs.Read(bytes, index, count);&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (n == 0)&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;throw&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(&lt;/span&gt;&lt;span style="font-size:x-small;color:#800000;"&gt;&amp;quot;End of file reached before expected&amp;quot;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;);
&lt;p style="padding-left:30px;"&gt;index += n;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;count -= n;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;} &lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;byte&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;[] val = obj.ComputeHash(bytes);&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;ASCIIEncoding&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ascii = &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;ASCIIEncoding&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;();&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; ascii.GetString(val);
&lt;p&gt;}&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;catch&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; (&lt;/span&gt;&lt;span style="font-size:x-small;color:#008080;"&gt;Exception&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;)
&lt;p&gt;{&lt;/p&gt;
&lt;span style="font-size:x-small;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="font-size:x-small;color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=27895" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term=".NET" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/.NET/default.aspx" /></entry><entry><title>Nice post about CSS and Rounded Corners</title><link rel="alternate" type="text/html" href="http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/01/nice-post-about-css-and-rounded-corners.aspx" /><id>http://dotnetslackers.com/Community/blogs/antrad/archive/2008/07/01/nice-post-about-css-and-rounded-corners.aspx</id><published>2008-07-01T13:13:00Z</published><updated>2008-07-01T13:13:00Z</updated><content type="html">&lt;p&gt;&lt;a target="_blank" href="http://www.smileycat.com/miaow/archives/000044.php#nojavascript" title="CSS" class="null"&gt;This&lt;/a&gt; is an useful link...I am not a&amp;nbsp;great&amp;nbsp;designer with web graphic :-)&lt;/p&gt;
&lt;p&gt;Bye&lt;/p&gt;
&lt;p&gt;Antonio&lt;/p&gt;&lt;img src="http://dotnetslackers.com/Community/aggbug.aspx?PostID=27516" width="1" height="1"&gt;</content><author><name>antrad</name><uri>http://dotnetslackers.com/Community/members/antrad.aspx</uri></author><category term="CSS and Javascript" scheme="http://dotnetslackers.com/Community/blogs/antrad/archive/tags/CSS+and+Javascript/default.aspx" /></entry></feed>
