<?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.timvw.be/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tim Van Wassenhove</title>
	
	<link>http://www.timvw.be</link>
	<description>The journey of a thousand miles begins with one step.</description>
	<lastBuildDate>Thu, 18 Feb 2010 19:56:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<feedburner:info uri="timvw/tsrw" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.timvw.be/feed" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://www.timvw.be/feed" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Fwww.timvw.be%2Ffeed" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Exploring System.Interactive</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/gy1MzTU3lnA/</link>
		<comments>http://www.timvw.be/exploring-system-interactive/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:09:15 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1702</guid>
		<description><![CDATA[A couple of weeks ago i was working on an application that would transfer data through a couple of components as a List&#60;object&#62;. In essence, all we were doing over and over again was the following:

interface IMapper&#60;TEntity&#62;
&#123;
&#160;TEntity FromObjectList&#40;List&#60;object&#62; objectList&#41;;
&#160;List&#60;object&#62; ToObjectList&#40;TEntity entity&#41;;
&#125;

My initial implementation (using EnumerableEx operators from Reactive Extensions) looked like this:

public TEntity FromObjectList&#40;List&#60;object&#62; objectList&#41;
&#123;
&#160;var [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago i was working on an application that would transfer data through a couple of components as a List&lt;object&gt;. In essence, all we were doing over and over again was the following:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw4">interface</span> IMapper<span class="sy0">&lt;</span>TEntity<span class="sy0">&gt;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;TEntity FromObjectList<span class="br0">&#40;</span>List<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> objectList<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;List<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> ToObjectList<span class="br0">&#40;</span>TEntity entity<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>

<p>My initial implementation (using EnumerableEx operators from <a href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx">Reactive Extensions</a>) looked like this:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw1">public</span> TEntity FromObjectList<span class="br0">&#40;</span>List<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> objectList<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;var entity <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> TEntity<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp;properties<br />
&nbsp; .<span class="me1">Zip</span><span class="br0">&#40;</span>objectList, <span class="br0">&#40;</span>property, value<span class="br0">&#41;</span> <span class="sy0">=&gt;</span> AssignValueToProperty<span class="br0">&#40;</span>entity, property, value<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; .<span class="me1">Run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp;<span class="kw1">return</span> entity<span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">int</span> AssignValueToProperty<span class="br0">&#40;</span><span class="kw4">object</span> entity, PropertyInfo property, <span class="kw4">object</span> value<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;property.<span class="me1">SetValue</span><span class="br0">&#40;</span>entity, value, <span class="kw1">null</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">public</span> List<span class="sy0">&lt;</span><span class="kw4">object</span><span class="sy0">&gt;</span> ToObjectList<span class="br0">&#40;</span>TEntity entity<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">return</span> properties<br />
&nbsp; .<span class="me1">Select</span><span class="br0">&#40;</span>property <span class="sy0">=&gt;</span> property.<span class="me1">GetValue</span><span class="br0">&#40;</span>entity, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; .<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span></div>

<p>And the consumer code looks like this:</p>

<div class="csharp" style="font-family:monospace;">var person <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> Person <span class="br0">&#123;</span> &nbsp;Id <span class="sy0">=</span> <span class="nu0">2</span>, Score <span class="sy0">=</span> <span class="nu0">1.3</span>, Name <span class="sy0">=</span> <span class="st0">&quot;Tim&quot;</span>, Title <span class="sy0">=</span> <span class="st0">&quot;Sir&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
var personMapper <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> Mapper<span class="sy0">&lt;</span>Person<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;.<span class="me1">Map</span><span class="br0">&#40;</span>x <span class="sy0">=&gt;</span> x.<span class="me1">Id</span><span class="br0">&#41;</span><br />
&nbsp;.<span class="me1">Map</span><span class="br0">&#40;</span>x <span class="sy0">=&gt;</span> x.<span class="me1">Score</span><span class="br0">&#41;</span><br />
&nbsp;.<span class="me1">Map</span><span class="br0">&#40;</span>x <span class="sy0">=&gt;</span> x.<span class="me1">Name</span><span class="br0">&#41;</span><br />
&nbsp;.<span class="me1">Map</span><span class="br0">&#40;</span>x <span class="sy0">=&gt;</span> x.<span class="me1">Title</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
var data <span class="sy0">=</span> personMapper.<span class="me1">ToObjectList</span><span class="br0">&#40;</span>person<span class="br0">&#41;</span><span class="sy0">;</span><br />
var clonedPerson <span class="sy0">=</span> personMapper.<span class="me1">FromObjectList</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span><span class="sy0">;</span></div>

<p>Wait a minute, in most situations we simply want to map all properties on the object. Let&#8217;s create a mapper for this:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw4">class</span> AutoMapper<span class="sy0">&lt;</span>TEntity<span class="sy0">&gt;</span> <span class="sy0">:</span> Mapper<span class="sy0">&lt;</span>TEntity<span class="sy0">&gt;</span> where TEntity <span class="sy0">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">public</span> AutoMapper<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span class="kw3">typeof</span></a><span class="br0">&#40;</span>TEntity<span class="br0">&#41;</span>.<span class="me1">GetProperties</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">Run</span><span class="br0">&#40;</span>property <span class="sy0">=&gt;</span> Map<span class="br0">&#40;</span>property<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>

<p>And now we don&#8217;t have to waste time doing the same thing over and over again! Because we always need to map all properties of our types we ended up with the following:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">class</span> Mapper<br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> List<span class="sy0">&lt;</span><span class="kw4">Object</span><span class="sy0">&gt;</span> ToObjectsList<span class="sy0">&lt;</span>TEntity<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw1">this</span> TEntity entity<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> entity.<span class="me1">GetType</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">GetProperties</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;.<span class="me1">Select</span><span class="br0">&#40;</span>property <span class="sy0">=&gt;</span> property.<span class="me1">GetValue</span><span class="br0">&#40;</span>entity, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;.<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> TEntity ToEntity<span class="sy0">&lt;</span>TEntity<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw1">this</span> List<span class="sy0">&lt;</span><span class="kw4">Object</span><span class="sy0">&gt;</span> objectsList<span class="br0">&#41;</span> where TEntity <span class="sy0">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; TEntity entity <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> TEntity<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; entity.<span class="me1">GetType</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">GetProperties</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;.<span class="me1">Zip</span><span class="br0">&#40;</span>objectsList, <span class="br0">&#40;</span>property, value<span class="br0">&#41;</span> <span class="sy0">=&gt;</span><span class="br0">&#123;</span> property.<span class="me1">SetValue</span><span class="br0">&#40;</span>entity, value,<span class="kw1">null</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;.<span class="me1">Run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">return</span> entity<span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/gy1MzTU3lnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/exploring-system-interactive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/exploring-system-interactive/</feedburner:origLink></item>
		<item>
		<title>Learned something from Resharper: Enumerable.OfType&lt;TResult&gt;</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/ww86zZFpLcM/</link>
		<comments>http://www.timvw.be/learned-something-from-resharper-enumerable-oftypetresult/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 18:18:23 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1697</guid>
		<description><![CDATA[A couple of weeks ago i discovered Enumerable.OfType&#60;TResult&#62; when i let Resharper rewrite my code as a Linq statement. Here is the original code:

var selectedPersons = new List&#60;PersonSelectItem&#62;&#40;&#41;;
foreach&#40;var selectedItem in selectedItems&#41;
&#123;
&#160;var selectedPerson = selectedItem as PersonSelectItem;
&#160;if &#40;selectedPerson == null&#41; continue;
&#160;selectedPersons.Add&#40;selectedPerson&#41;;
&#125;

And here is how it looks after the rewrite:

var selectedPersons = selectedItems.OfType&#60;PersonSelectItem&#62;&#40;&#41;.ToList&#40;&#41;;

Yup, the Resharper license was [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago i discovered <a href="http://msdn.microsoft.com/en-us/library/bb360913.aspx">Enumerable.OfType&lt;TResult&gt;</a> when i let Resharper rewrite my code as a Linq statement. Here is the original code:</p>

<div class="csharp" style="font-family:monospace;">var selectedPersons <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> List<span class="sy0">&lt;</span>PersonSelectItem<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="kw1">foreach</span><span class="br0">&#40;</span>var selectedItem <span class="kw1">in</span> selectedItems<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;var selectedPerson <span class="sy0">=</span> selectedItem <span class="kw1">as</span> PersonSelectItem<span class="sy0">;</span><br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>selectedPerson <span class="sy0">==</span> <span class="kw1">null</span><span class="br0">&#41;</span> continue<span class="sy0">;</span><br />
&nbsp;selectedPersons.<span class="me1">Add</span><span class="br0">&#40;</span>selectedPerson<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>

<p>And here is how it looks after the rewrite:</p>

<div class="csharp" style="font-family:monospace;">var selectedPersons <span class="sy0">=</span> selectedItems.<span class="me1">OfType</span><span class="sy0">&lt;</span>PersonSelectItem<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">ToList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>

<p>Yup, the <a href="http://www.jetbrains.com/resharper/">Resharper</a> license was definitely worth it&#8217;s money.</p><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/ww86zZFpLcM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/learned-something-from-resharper-enumerable-oftypetresult/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/learned-something-from-resharper-enumerable-oftypetresult/</feedburner:origLink></item>
		<item>
		<title>Calculate EndpointAddress for Silverlight client</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/ZUDEMY-GC68/</link>
		<comments>http://www.timvw.be/calculate-endpointaddress-for-silverlight-client/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 20:44:18 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1691</guid>
		<description><![CDATA[Because Silverlight checks the origin it considers http://localhost and http://127.0.0.1 as different locations. In case you want your visitors to be able to use both addresses you can recalculate the address as following:

EndpointAddress GetEndpointAddress&#40;EndpointAddress endpointAddress&#41;
&#123;
&#160;var scheme = Application.Current.Host.Source.GetComponents&#40;UriComponents.Scheme, UriFormat.Unescaped&#41;;
&#160;var serverAndPort = Application.Current.Host.Source.GetComponents&#40;UriComponents.HostAndPort, UriFormat.Unescaped&#41;;
&#160;var pathAndQuery = endpointAddress.Uri.GetComponents&#40;UriComponents.PathAndQuery, UriFormat.Unescaped&#41;;
&#160;return new EndpointAddress&#40;scheme + &#34;://&#34; + serverAndPort + pathAndQuery&#41;;
&#125;

And [...]]]></description>
			<content:encoded><![CDATA[<p>Because Silverlight checks the origin it considers http://localhost and http://127.0.0.1 as different locations. In case you want your visitors to be able to use both addresses you can recalculate the address as following:</p>

<div class="csharp" style="font-family:monospace;">EndpointAddress GetEndpointAddress<span class="br0">&#40;</span>EndpointAddress endpointAddress<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;var scheme <span class="sy0">=</span> Application.<span class="me1">Current</span>.<span class="me1">Host</span>.<span class="me1">Source</span>.<span class="me1">GetComponents</span><span class="br0">&#40;</span>UriComponents.<span class="me1">Scheme</span>, UriFormat.<span class="me1">Unescaped</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;var serverAndPort <span class="sy0">=</span> Application.<span class="me1">Current</span>.<span class="me1">Host</span>.<span class="me1">Source</span>.<span class="me1">GetComponents</span><span class="br0">&#40;</span>UriComponents.<span class="me1">HostAndPort</span>, UriFormat.<span class="me1">Unescaped</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;var pathAndQuery <span class="sy0">=</span> endpointAddress.<span class="me1">Uri</span>.<span class="me1">GetComponents</span><span class="br0">&#40;</span>UriComponents.<span class="me1">PathAndQuery</span>, UriFormat.<span class="me1">Unescaped</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="kw1">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> EndpointAddress<span class="br0">&#40;</span>scheme <span class="sy0">+</span> <span class="st0">&quot;://&quot;</span> <span class="sy0">+</span> serverAndPort <span class="sy0">+</span> pathAndQuery<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>

<p>And you can use this method as following:</p>

<div class="csharp" style="font-family:monospace;">var client <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> DirectoryServiceClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
client.<span class="me1">Endpoint</span>.<span class="me1">Address</span> <span class="sy0">=</span> GetEndpointAddress<span class="br0">&#40;</span>client.<span class="me1">Endpoint</span>.<span class="me1">Address</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
client.<span class="me1">GetMessageCompleted</span> <span class="sy0">+=</span> ClientGetMessageCompleted<span class="sy0">;</span><br />
client.<span class="me1">GetMessageAsync</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/ZUDEMY-GC68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/calculate-endpointaddress-for-silverlight-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/calculate-endpointaddress-for-silverlight-client/</feedburner:origLink></item>
		<item>
		<title>Clever TemplateFile hack</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/AwRnCIcau1M/</link>
		<comments>http://www.timvw.be/clever-templatefile-hack/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 20:50:58 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1679</guid>
		<description><![CDATA[In my current project i use TemplateFileTask (MSBuild Community Tasks Project) to generate configuration files. I ran into the problem that i don&#8217;t want to expose a MEX endpoint in production. This is my initial template file:

&#60;service behaviorConfiguration=&#34;DemoBehavior&#34; name=&#34;DemoService.FileService&#34;&#62;
&#160;&#60;endpoint address=&#34;&#34; binding=&#34;ws2007HttpBinding&#34; contract=&#34;DemoService.IFileService&#34; /&#62;
&#160;${MexEndpoint}
&#60;/service&#62;

And here is my initial msbuild task:

&#60;Project ToolsVersion=&#34;3.5&#34; DefaultTargets=&#34;GenerateConfigFiles&#34; xmlns=&#34;http://schemas.microsoft.com/developer/msbuild/2003&#34;&#62;
&#60;Import Project=&#34;$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets&#34;/&#62;
&#160;&#60;Target Name=&#34;GenerateConfigFiles&#34;&#62;
&#160; &#60;PropertyGroup&#62;
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>In my current project i use TemplateFileTask (<a href="http://msbuildtasks.tigris.org/">MSBuild Community Tasks Project</a>) to generate configuration files. I ran into the problem that i don&#8217;t want to expose a MEX endpoint in production. This is my initial template file:</p>

<div class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;service</span> <span class="re0">behaviorConfiguration</span>=<span class="st0">&quot;DemoBehavior&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;DemoService.FileService&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;endpoint</span> <span class="re0">address</span>=<span class="st0">&quot;&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;ws2007HttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;DemoService.IFileService&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp;${MexEndpoint}<br />
<span class="sc3"><span class="re1">&lt;/service<span class="re2">&gt;</span></span></span></div>

<p>And here is my initial msbuild task:</p>

<div class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;Project</span> <span class="re0">ToolsVersion</span>=<span class="st0">&quot;3.5&quot;</span> <span class="re0">DefaultTargets</span>=<span class="st0">&quot;GenerateConfigFiles&quot;</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;</span><span class="re2">&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;Import</span> <span class="re0">Project</span>=<span class="st0">&quot;$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;Target</span> <span class="re0">Name</span>=<span class="st0">&quot;GenerateConfigFiles&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;PropertyGroup<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;MexEndpoint<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;endpoint</span> <span class="re0">address</span>=<span class="st0">&quot;mex&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;mexHttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;IMetadataExchange&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/MexEndpoint<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/PropertyGroup<span class="re2">&gt;</span></span></span><br />
<br />
&nbsp; <span class="sc3"><span class="re1">&lt;PropertyGroup</span> <span class="re0">Condition</span>=<span class="st0">&quot; &#8216;$(Env)&#8217;==&#8217;Production&#8217; &quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;MexEndpoint<span class="re2">&gt;</span></span><span class="re1">&lt;/MexEndpoint<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/PropertyGroup<span class="re2">&gt;</span></span></span><br />
<br />
&nbsp; <span class="sc3"><span class="re1">&lt;ItemGroup<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;Tokens</span> <span class="re0">Include</span>=<span class="st0">&quot;MexEndpoint&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ReplacementValue<span class="re2">&gt;</span></span></span>$(MexEndpoint)<span class="sc3"><span class="re1">&lt;/ReplacementValue<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/Tokens<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/ItemGroup<span class="re2">&gt;</span></span></span><br />
<br />
&nbsp; <span class="sc3"><span class="re1">&lt;TemplateFile</span> <span class="re0">Template</span>=<span class="st0">&quot;Web.template.config&quot;</span> <span class="re0">OutputFileName</span>=<span class="st0">&quot;Web.config&quot;</span> <span class="re0">Tokens</span>=<span class="st0">&quot;@(Tokens)&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;/Target<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/Project<span class="re2">&gt;</span></span></span></div>

<p>This results in the following configuration file: (WCF does not like the xml namespace declaration):</p>

<div class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;service</span> <span class="re0">behaviorConfiguration</span>=<span class="st0">&quot;DemoBehavior&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;DemoService.FileService&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;endpoint</span> <span class="re0">address</span>=<span class="st0">&quot;&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;ws2007HttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;DemoService.IFileService&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;endpoint</span> <span class="re0">address</span>=<span class="st0">&quot;mex&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;mexHttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;IMetadataExchange&quot;</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://schemas.microsoft.com/developer/msbuild/2003&quot;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/service<span class="re2">&gt;</span></span></span></div>

<p>I noticed that a smart collegue of mine, <a href="http://be.linkedin.com/in/samverschooten">Sam Verschooten</a> came up with the following template file:</p>

<div class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;service</span> <span class="re0">behaviorConfiguration</span>=<span class="st0">&quot;DemoBehavior&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;DemoService.FileService&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp;<span class="sc3"><span class="re1">&lt;endpoint</span> <span class="re0">address</span>=<span class="st0">&quot;&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;ws2007HttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;DemoService.IFileService&quot;</span> <span class="re2">/&gt;</span></span><br />
&nbsp;<span class="sc3">&lt;$<span class="br0">&#123;</span>MexBegin<span class="br0">&#125;</span>endpoint <span class="re0">address</span>=<span class="st0">&quot;mex&quot;</span> <span class="re0">binding</span>=<span class="st0">&quot;mexHttpBinding&quot;</span> <span class="re0">contract</span>=<span class="st0">&quot;IMetadataExchange&quot;</span> /$<span class="br0">&#123;</span>MexEnd<span class="br0">&#125;</span><span class="re2">&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/service<span class="re2">&gt;</span></span></span></div>

<p>And this is how he defines the MexBegin and MexEnd properties in msbuild:</p>

<div class="csharp" style="font-family:monospace;"><span class="sy0">&lt;</span>PropertyGroup<span class="sy0">&gt;</span><br />
&nbsp;<span class="sy0">&lt;</span>MexBegin<span class="sy0">&gt;&lt;/</span>MexBegin<span class="sy0">&gt;</span><br />
&nbsp;<span class="sy0">&lt;</span>MexEnd<span class="sy0">&gt;&lt;/</span>MexEnd<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;/</span>PropertyGroup<span class="sy0">&gt;</span><br />
<br />
<span class="sy0">&lt;</span>PropertyGroup Condition<span class="sy0">=</span><span class="st0">&quot; &#8216;$(Env)&#8217;==&#8217;Production&#8217; &quot;</span><span class="sy0">&gt;</span><br />
&nbsp;<span class="sy0">&lt;</span>MexBegin<span class="sy0">&gt;!&#8211;&lt;/</span>MexBegin<span class="sy0">&gt;</span><br />
&nbsp;<span class="sy0">&lt;</span>MexEnd<span class="sy0">&gt;&#8211;&lt;/</span>MexEnd<span class="sy0">&gt;</span><br />
<span class="sy0">&lt;/</span>PropertyGroup<span class="sy0">&gt;</span></div>

<p>This leads to a nice MEX endpoint for all environments and in Production we get the following:</p>

<div class="xml" style="font-family:monospace;"><span class="sc-1">&lt;!&#8211;endpoint address=&quot;mex&quot; binding=&quot;mexHttpBinding&quot; contract=&quot;IMetadataExchange&quot; /&#8211;&gt;</span></div>

<p>Perhaps it is cleaner to implement my own TemplateFileTask but untill then this clever hack does the job <img src='http://www.timvw.be/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/AwRnCIcau1M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/clever-templatefile-hack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/clever-templatefile-hack/</feedburner:origLink></item>
		<item>
		<title>Another missing method for IEnumerable&lt;T&gt;</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/jxQT2BrjVrE/</link>
		<comments>http://www.timvw.be/another-missing-method-for-ienumerablet/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:29:33 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1669</guid>
		<description><![CDATA[Currently there are two overloads for OrderBy on Enumerable:


OrderBy(this IEnumerable&#60;TSource&#62; source, Func&#60;TSource, TKey&#62; keySelector)
OrderBy(this IEnumerable&#60;TSource&#62; source, Func&#60;TSource, TKey&#62; keySelector, IComparer&#60;TKey&#62; comparer)


Because i don&#8217;t want to implement an IComparer&#60;TKey&#62; each time i have implemented the following class:

class DelegateComparer&#60;T&#62; : IComparer&#60;T&#62;
&#123;
&#160;public Func&#60;T, T, int&#62; CompareFunction &#123; get; set; &#125;

&#160;public DelegateComparer&#40;Func&#60;T, T, int&#62; compareFunction&#41;
&#160;&#123;
&#160; CompareFunction = compareFunction;
&#160;&#125;

&#160;public int [...]]]></description>
			<content:encoded><![CDATA[<p>Currently there are two overloads for OrderBy on Enumerable:</p>

<ul>
<li>OrderBy(this IEnumerable&lt;TSource&gt; source, Func&lt;TSource, TKey&gt; keySelector)</li>
<li>OrderBy(this IEnumerable&lt;TSource&gt; source, Func&lt;TSource, TKey&gt; keySelector, IComparer&lt;TKey&gt; comparer)</li>
</ul>

<p>Because i don&#8217;t want to implement an IComparer&lt;TKey&gt; each time i have implemented the following class:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw4">class</span> DelegateComparer<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> <span class="sy0">:</span> IComparer<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">public</span> Func<span class="sy0">&lt;</span>T, T, <span class="kw4">int</span><span class="sy0">&gt;</span> CompareFunction <span class="br0">&#123;</span> get<span class="sy0">;</span> set<span class="sy0">;</span> <span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> DelegateComparer<span class="br0">&#40;</span>Func<span class="sy0">&lt;</span>T, T, <span class="kw4">int</span><span class="sy0">&gt;</span> compareFunction<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; CompareFunction <span class="sy0">=</span> compareFunction<span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw4">int</span> Compare<span class="br0">&#40;</span>T x, T y<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> CompareFunction<span class="br0">&#40;</span>x, y<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>

<p>And now i can define a nice extension method:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> IOrderedEnumerable<span class="sy0">&lt;</span>TSource<span class="sy0">&gt;</span> OrderBy<span class="sy0">&lt;</span>TSource, TKey<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw1">this</span> IEnumerable<span class="sy0">&lt;</span>TSource<span class="sy0">&gt;</span> source, Func<span class="sy0">&lt;</span>TSource, TKey<span class="sy0">&gt;</span> keySelector, Func<span class="sy0">&lt;</span>TKey, TKey, <span class="kw4">int</span><span class="sy0">&gt;</span> compareFunction<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;var comparer <span class="sy0">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span class="kw3">new</span></a> DelegateComparer<span class="sy0">&lt;</span>TKey<span class="sy0">&gt;</span><span class="br0">&#40;</span>compareFunction<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="kw1">return</span> source.<span class="me1">OrderBy</span><span class="br0">&#40;</span>keySelector, comparer<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/jxQT2BrjVrE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/another-missing-method-for-ienumerablet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/another-missing-method-for-ienumerablet/</feedburner:origLink></item>
		<item>
		<title>Verify that a X509Certificate can be used for key exchange</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/8TbHdMtmWls/</link>
		<comments>http://www.timvw.be/verify-that-a-x509certificate-can-be-used-for-key-exchange/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 18:39:38 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1663</guid>
		<description><![CDATA[Here is another method that earned it&#8217;s place in my ever growing toolbox:

public static bool CanDoKeyExchange&#40;this X509Certificate2 certificate&#41;
&#123;
&#160;if &#40;!certificate.HasPrivateKey&#41; return false;

&#160;var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
&#160;if &#40;privateKey == null&#41; return false;

&#160;var canDoKeyExchange = privateKey.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange;
&#160;return canDoKeyExchange;
&#125;]]></description>
			<content:encoded><![CDATA[<p>Here is another method that earned it&#8217;s place in my ever growing toolbox:</p>

<div class="csharp" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">bool</span> CanDoKeyExchange<span class="br0">&#40;</span><span class="kw1">this</span> X509Certificate2 certificate<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>certificate.<span class="me1">HasPrivateKey</span><span class="br0">&#41;</span> <span class="kw1">return</span> false<span class="sy0">;</span><br />
<br />
&nbsp;var privateKey <span class="sy0">=</span> certificate.<span class="me1">PrivateKey</span> <span class="kw1">as</span> RSACryptoServiceProvider<span class="sy0">;</span><br />
&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>privateKey <span class="sy0">==</span> <span class="kw1">null</span><span class="br0">&#41;</span> <span class="kw1">return</span> false<span class="sy0">;</span><br />
<br />
&nbsp;var canDoKeyExchange <span class="sy0">=</span> privateKey.<span class="me1">CspKeyContainerInfo</span>.<span class="me1">KeyNumber</span> <span class="sy0">==</span> KeyNumber.<span class="me1">Exchange</span><span class="sy0">;</span><br />
&nbsp;<span class="kw1">return</span> canDoKeyExchange<span class="sy0">;</span><br />
<span class="br0">&#125;</span></div><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/8TbHdMtmWls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/verify-that-a-x509certificate-can-be-used-for-key-exchange/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/verify-that-a-x509certificate-can-be-used-for-key-exchange/</feedburner:origLink></item>
		<item>
		<title>Presenting ValueType&lt;T&gt;</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/I6HZcEM5Tg8/</link>
		<comments>http://www.timvw.be/presenting-valuetypet/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 18:27:34 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1650</guid>
		<description><![CDATA[Here is a base class for some code that i have written once too many in my life: (In case you&#8217;re an early adaptor (.Net 4.0) you may want to use System.Tuple&#60;T1&#62; as base class)

public class ValueType&#60;T&#62; : IComparable, IComparable&#60;ValueType&#60;T&#62;&#62;, IEquatable&#60;ValueType&#60;T&#62;&#62;
&#160;where T : IComparable&#60;T&#62;
&#123;
&#160;protected T Value &#123; get; private set; &#125;public ValueType&#40;T value&#41;
&#160;&#123;
&#160; Value = [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a base class for some code that i have written once too many in my life: (In case you&#8217;re an early adaptor (.Net 4.0) you may want to use System.Tuple&lt;T1&gt; as base class)</p>

<div class="csharp" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw4">class</span> ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> <span class="sy0">:</span> IComparable, IComparable<span class="sy0">&lt;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;&gt;</span>, IEquatable<span class="sy0">&lt;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;&gt;</span><br />
&nbsp;where T <span class="sy0">:</span> IComparable<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span><br />
<span class="br0">&#123;</span><br />
&nbsp;<span class="kw1">protected</span> T Value <span class="br0">&#123;</span> get<span class="sy0">;</span> <span class="kw1">private</span> set<span class="sy0">;</span> <span class="br0">&#125;</span><span class="kw1">public</span> ValueType<span class="br0">&#40;</span>T value<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; Value <span class="sy0">=</span> value<span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">override</span> <span class="kw4">int</span> GetHashCode<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Value.<span class="me1">GetHashCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">override</span> <span class="kw4">string</span> ToString<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Value.<span class="me1">ToString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">override</span> <span class="kw4">bool</span> Equals<span class="br0">&#40;</span><span class="kw4">object</span> obj<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Equals<span class="br0">&#40;</span>obj <span class="kw1">as</span> ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw4">bool</span> Equals<span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> other<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Compare<span class="br0">&#40;</span><span class="kw1">this</span>, other<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw4">int</span> CompareTo<span class="br0">&#40;</span><span class="kw4">object</span> obj<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> CompareTo<span class="br0">&#40;</span><span class="kw1">this</span>, obj <span class="kw1">as</span> ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw4">int</span> CompareTo<span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> other<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Compare<span class="br0">&#40;</span><span class="kw1">this</span>, other<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">static</span> <span class="kw4">int</span> Compare<span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance1, ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance2<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance1, instance2<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance1, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance2, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance1.<span class="me1">Value</span>, instance2.<span class="me1">Value</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance1.<span class="me1">Value</span>, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="sy0">-</span><span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>ReferenceEquals<span class="br0">&#40;</span>instance2.<span class="me1">Value</span>, <span class="kw1">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span><br />
<br />
&nbsp; <span class="kw1">return</span> instance1.<span class="me1">Value</span>.<span class="me1">CompareTo</span><span class="br0">&#40;</span>instance2.<span class="me1">Value</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">bool</span> <span class="kw1">operator</span> <span class="sy0">==</span><span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance1, ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance2<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> Compare<span class="br0">&#40;</span>instance1, instance2<span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">bool</span> <span class="kw1">operator</span> <span class="sy0">!=</span><span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance1, ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance2<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span> <span class="sy0">!</span><span class="br0">&#40;</span>instance1 <span class="sy0">==</span> instance2<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">bool</span> <span class="kw1">operator</span> <span class="sy0">&lt;</span><span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance1, ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance2<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">return</span> Compare<span class="br0">&#40;</span>instance1, instance2<span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<br />
&nbsp;<span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">bool</span> <span class="kw1">operator</span> <span class="sy0">&gt;</span><span class="br0">&#40;</span>ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance1, ValueType<span class="sy0">&lt;</span>T<span class="sy0">&gt;</span> instance2<span class="br0">&#41;</span><br />
&nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw1">return</span> Compare<span class="br0">&#40;</span>instance1, instance2<span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="sy0">;</span><br />
&nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/I6HZcEM5Tg8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/presenting-valuetypet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/presenting-valuetypet/</feedburner:origLink></item>
		<item>
		<title>Do we need an EventAggregator when we have an IOC container?</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/gT41skk2aVU/</link>
		<comments>http://www.timvw.be/do-we-need-an-eventaggregator-when-we-have-an-ioc-container/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:55:34 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1642</guid>
		<description><![CDATA[An Event Aggregator is an example of a Publish/Subscribe channel. A while ago i started wondering if we still need an Event Aggregator in our compisite applications if we have an IOC container that takes cares of dependency wiring. An IOC container can easily inject the Event/MessageHandler(s) in the Event/MessagePublisher(s)&#8230;  I&#8217;m still not sure [...]]]></description>
			<content:encoded><![CDATA[<p>An <a href="http://msdn.microsoft.com/en-us/library/cc707867.aspx">Event Aggregator</a> is an example of a <a href="http://www.eaipatterns.com/PublishSubscribeChannel.html">Publish/Subscribe channel</a>. A while ago i started wondering if we still need an Event Aggregator in our compisite applications if we have an IOC container that takes cares of dependency wiring. An IOC container can easily inject the Event/MessageHandler(s) in the Event/MessagePublisher(s)&#8230;  I&#8217;m still not sure about the answer (Yes/No).</p><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/gT41skk2aVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/do-we-need-an-eventaggregator-when-we-have-an-ioc-container/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/do-we-need-an-eventaggregator-when-we-have-an-ioc-container/</feedburner:origLink></item>
		<item>
		<title>About dependencies</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/Z280x6crfZg/</link>
		<comments>http://www.timvw.be/about-dependencies/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 07:38:23 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[Information Technology]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1635</guid>
		<description><![CDATA[This weekend i noticed a couple of posts by Uncle Bob trying to get some discussions going. In Mocking Mocking and Testing Outcomes at some point he generates a fake of some class

“Oh, ick!” you say. Yes, I agree it’s a lot of code. On the other hand, it took me just a single keystroke [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend i noticed a couple of posts by Uncle Bob trying to get some discussions going. In <a href="http://blog.objectmentor.com/articles/2010/01/23/mocking-mocking-and-testing-outcomes">Mocking Mocking and Testing Outcomes</a> at some point he generates a fake of some class</p>

<blockquote>“Oh, ick!” you say. Yes, I agree it’s a lot of code. On the other hand, it took me just a single keystroke on my IDE to generate all those dummy methods. (In IntelliJ it was simply command-I to implement all unimplemented methods.) So it wasn’t particularly hard. And, of course, I can put this code somewhere where nobody had to look at it unless they want to. It has the advantage that anybody who knows Java can understand it, and can look right at the methods to see what they are returning. No “special” knowledge of the mocking framework is necessary.</blockquote>

<p>So adding a lot of generated code, which no-one should ever look at, is better than a mocking framework? Hahaha, why would i want to repeat myself creating all those fake objects? (<a href="http://c2.com/cgi/wiki?DontRepeatYourself">DRY</a>)</p>

<p>Another problem that i have with his example is the fact that the &#8216;dependency&#8217; has a ton of methods that are not used by the consumer, so it makes me wonder: why are those methods there? Define an interface for the required methods, and have your consumer use that interface instead. This way you don&#8217;t have to look at those unused methods which only clutter the API.</p>

<p>A second read made it clear that Uncle Bob is talking about unit-tests, which are typically implemented as state-based tests. In case you&#8217;re doing integration tests, you will have (more) dependencies and want to verify the interaction between your system under test and the dependencies. And that is (imho) the scenario where mocking frameworks really shine <img src='http://www.timvw.be/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/Z280x6crfZg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/about-dependencies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/about-dependencies/</feedburner:origLink></item>
		<item>
		<title>About forced design</title>
		<link>http://feeds.timvw.be/~r/timvw/tsRW/~3/beX9U5b5cV0/</link>
		<comments>http://www.timvw.be/about-forced-design/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 11:46:09 +0000</pubDate>
		<dc:creator>timvw</dc:creator>
				<category><![CDATA[Information Technology]]></category>

		<guid isPermaLink="false">http://www.timvw.be/?p=1624</guid>
		<description><![CDATA[if you need typemock your design is wrong.

Although i understand what people are trying to say with that quote, it&#8217;s wrong on many levels. I pretty much agree with everything that Roy wrote in Test driven design – Willed vs. Forced Designs. As some commenters pointed out it is hard to convince management that they [...]]]></description>
			<content:encoded><![CDATA[<blockquote>if you need typemock your design is wrong.</blockquote>

<p>Although i understand what people are trying to say with that quote, it&#8217;s wrong on many levels. I pretty much agree with everything that Roy wrote in <a href="http://weblogs.asp.net/rosherove/archive/2009/11/12/test-driven-design-willed-vs-forced-designs.aspx">Test driven design – Willed vs. Forced Designs</a>. As some commenters pointed out it is hard to convince management that they need an isolation framework, let alone that they have to pay for one.</p>

<p>A couple of thoughts:</p>

<ul>
<li>What about Pex Stubs &#038; Moles? It uses the profiling API (less limitations than rhino/moq/&#8230;) too and for a lot of shops doing .Net development it&#8217;s free.</li>
<li>I really don&#8217;t understand people that are unwilling to pay for tools that can contribute to the generation of business value (eg: Resharper, NCover, NDepend, &#8230;) when they don&#8217;t come from Microsoft.</li>
<li>Filling up gaps in the .Net/Microsoft space seems like an awful business model.</li>
</ul><img src="http://feeds.feedburner.com/~r/timvw/tsRW/~4/beX9U5b5cV0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.timvw.be/about-forced-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.timvw.be/about-forced-design/</feedburner:origLink></item>
	</channel>
</rss>
