<?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.southworks.net/~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>Mariano Converti</title>
	
	<link>http://blogs.southworks.net/mconverti</link>
	<description>Sharing some thoughts...</description>
	<lastBuildDate>Tue, 17 Jan 2012 19:06:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.southworks.net/mconverti" /><feedburner:info uri="mconverti" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Introducing ‘Silverlight Activator for Windows Phone’ NuGet Package</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/5QDaqWdGj_I/</link>
		<comments>http://blogs.southworks.net/mconverti/2011/11/13/introducing-silverlight-activator-for-windows-phone-nuget-package/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 20:12:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[NuGet]]></category>
		<category><![CDATA[Silverlight for Windows Phone]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/2011/11/13/introducing-silverlight-activator-for-windows-phone-nuget-package/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2011/11/13/introducing-silverlight-activator-for-windows-phone-nuget-package/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px"></div>
<p><img style="border-right-width: 0px;margin: 0px 4px 4px 0px;padding-left: 0px;padding-right: 0px;float: left;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="NuGet-WindowsPhone" align="left" src="http://blogs.southworks.net/mconverti/files/2011/11/NuGet-WindowsPhone.png" width="222" height="94" />Over the past few months, I’ve been working with <a href="http://blogs.southworks.net/dmartinez">Damián Martinez Gelabert</a>, <a href="http://blogs.southworks.net/nbello">Nicolás Bello Camilletti</a>, <a href="http://blogs.southworks.net/jhalife">Johnny Halife</a>, <a href="http://blogs.southworks.net/jpgarcia">Juan Pablo García</a> and <a href="http://blogs.southworks.net/mkrikorian">Mauro Krikorian</a> in a set of <a href="http://nuget.org">NuGet</a> packages for <em>ASP.NET MVC 3</em> and <em>Silverlight for Windows Phone </em>projects, targeting server-side and client-side pieces of the same scenario. During the development, we realized that we needed to run initialization code at startup to configure some settings required for our NuGet packages. Additionally, we had a hierarchy of NuGet packages and each of them needed to register its own settings to extend the original scenario.</p>
<p>Resolving these requirements in server-side NuGet packages was easy by using <a href="http://nuget.org/List/Packages/WebActivator">WebActivator</a> as a dependency. This package provides a clean solution for this problem (without having to manually modify the <em>Global.asax</em> file) by letting you use multiple <a href="https://bitbucket.org/davidebbo/webactivator/src/bb05d55459bc/WebActivator/PreApplicationStartMethodAttribute.cs">PreApplicationStartMethod</a> and <a href="https://bitbucket.org/davidebbo/webactivator/src/bb05d55459bc/WebActivator/PostApplicationStartMethodAttribute.cs">PostApplicationStartMethod</a> assembly attributes to indicate the methods that are intended to run at startup (notice that the <em>Pre</em> and <em>Post</em> attributes already give an implicit execution order). For more information on this package you can check the <a href="https://bitbucket.org/davidebbo/webactivator/wiki/Home">WebActivator wiki</a>.</p>
<p>On the Windows Phone client-side, however, we couldn’t find a package that did a similar thing. We wanted to have the same attribute-based clean experience to specify the code that should run at startup, to avoid being intrusive modifying existing application code. That is why we created the <strong>Silverlight Activator for Windows Phone</strong> package, to enable these features in Windows Phone applications.</p>
<ul>
<li>NuGet package @ <a title="http://nuget.org/List/Packages/SilverlightActivator" href="http://nuget.org/List/Packages/SilverlightActivator">http://nuget.org/List/Packages/SilverlightActivator</a> </li>
<li>Source code @ <a title="https://github.com/mconverti/silverlightactivator" href="https://github.com/mconverti/silverlightactivator">https://github.com/mconverti/silverlightactivator</a> </li>
</ul>
<h2>How do I use it in my NuGet packages?</h2>
<p>As I already mentioned, the idea behind this package is to allow other Silverlight for Windows Phone NuGet packages to execute some code when the application is starting up and/or closing. So, if you are planning to build a NuGet package with these requirements, you can leverage the <strong>Silverlight Activator for Windows Phone</strong> NuGet package as follows:</p>
<ol>
<li>In your package&#8217;s <em>.nuspec</em> file, add a dependency on <strong>SilverlightActivator</strong> (version 1.0.4).
<pre class="code"><span style="color: blue">&lt;?</span><span style="color: #a31515">xml </span><span style="color: red">version</span><span style="color: blue">=</span>&quot;<span style="color: blue">1.0</span>&quot;<span style="color: blue">?&gt;
&lt;</span><span style="color: #a31515">package </span><span style="color: red">xmlns</span><span style="color: blue">=</span>&quot;<span style="color: blue">http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd</span>&quot;<span style="color: blue">&gt;
  &lt;</span><span style="color: #a31515">metadata</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">id</span><span style="color: blue">&gt;</span>YourSilverlightForWindowsPhonePackageId<span style="color: blue">&lt;/</span><span style="color: #a31515">id</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">version</span><span style="color: blue">&gt;</span>1.0.0<span style="color: blue">&lt;/</span><span style="color: #a31515">version</span><span style="color: blue">&gt;
    &lt;!-- </span><span style="color: green">... </span><span style="color: blue">--&gt;
    &lt;</span><span style="color: #a31515">dependencies</span><span>&gt;
<strong>      <font></font>&lt;</strong></span><strong><span style="color: #a31515">dependency </span><span style="color: red">id</span><span style="color: blue">=</span>&quot;<span style="color: blue">SilverlightActivator</span>&quot; <span style="color: red">version</span><span style="color: blue">=</span>&quot;<span style="color: blue">1.0.4</span>&quot; </strong><span style="color: blue"><strong>/&gt;</strong>
</span><span style="color: blue">    &lt;/</span><span style="color: #a31515">dependencies</span><span style="color: blue">&gt;
  &lt;/</span><span style="color: #a31515">metadata</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">package</span><span style="color: blue">&gt;
</span></pre>
</li>
<li>For consistency with <a href="http://nuget.org/List/Packages/WebActivator">WebActivator</a>, include an <strong>App_Start</strong> folder to place all your activation classes. </li>
<li>Under this folder, add the source code files with your initialization / finalization code as shown below (make sure to add the <em>.pp</em> extension to the file so it can be <strong>p</strong>re<strong>p</strong>rocessed).
<pre class="code"><font></font><strong>[<span style="color: blue">assembly</span>: SilverlightActivator.<span style="color: #2b91af">ApplicationStartupMethod</span>(
    <span style="color: blue">typeof</span>($rootnamespace$.App_Start.MyClassInitializer),
    <span style="color: #a31515">&quot;ApplicationStartup&quot;</span>,
    Order = 10)]
[<span style="color: blue">assembly</span>: SilverlightActivator.<span style="color: #2b91af">ApplicationExitMethod</span>(
    <span style="color: blue">typeof</span>($rootnamespace$.App_Start.MyClassInitializer),
    <span style="color: #a31515">&quot;ApplicationExit&quot;</span>,
    Order = 10)]</strong>

<span style="color: blue">namespace </span>$rootnamespace$.App_Start
{
    <span style="color: blue">public class </span><span style="color: #2b91af">MyClassInitializer
    </span>{
        <span style="color: blue">public <strong><font></font></strong></span><span style="color: blue"><strong>static</strong> </span><span style="color: blue">void </span><strong><font></font></strong><strong>ApplicationStartup</strong><strong><font></font></strong>()
        {
            <span style="color: green">// TODO: Add your startup code.
        </span>}

        <span style="color: blue">public <strong><font></font></strong></span><span style="color: blue"><strong>static</strong> </span><span style="color: blue">void </span><strong><font></font></strong><strong>ApplicationExit</strong><strong><font></font></strong>()
        {
            <span style="color: green">// TODO: Add your finalization code.
        </span>}
    }
}</pre>
</li>
</ol>
<p>The previous sample code uses the two available assembly attributes: <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationStartupMethodAttribute.cs">ApplicationStartupMethod</a> and <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationExitMethodAttribute.cs">ApplicationExitMethod</a>. Take into account the following when using these attributes:</p>
<ul>
<li>The methods marked by the attributes must be <strong>static</strong>. </li>
<li>The methods marked with the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationStartupMethodAttribute.cs">ApplicationStartupMethod</a> attribute will be executed when the <a href="http://msdn.microsoft.com/library/system.windows.application.startup(v=vs.95).aspx">Application.Startup</a> event is risen </li>
<li>The methods marked with the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationExitMethodAttribute.cs">ApplicationExitMethod</a> attribute will be executed when the <a href="http://msdn.microsoft.com/library/system.windows.application.exit(v=vs.95).aspx">Application.Exit</a> event is risen </li>
<li>The <strong>Order</strong> property in the attributes lets you control the execution order of the methods. If <u>not</u> specified, its value is set to <strong>int.MaxValue</strong> by default (so it is the last to run).</li>
</ul>
<h2>How does it work?</h2>
<p>The <strong>Silverlight Activator for Windows Phone</strong> package is composed of the following things:</p>
<ol>
<li>The <strong>SilverlightActivator</strong> library, which contains the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a> class with the logic to handle the activation logic based on the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationStartupMethodAttribute.cs">ApplicationStartupMethod</a> and <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationExitMethodAttribute.cs">ApplicationExitMethod</a> assembly attributes. </li>
<li>A transformation for the <strong>App.xaml</strong> file, which adds an application resource of type <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a>. </li>
</ol>
<p>By adding the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a> as an application resource, we are making sure that one instance of this class is created to register handlers for the <a href="http://msdn.microsoft.com/library/system.windows.application.startup(v=vs.95).aspx">Application.Startup</a> and <a href="http://msdn.microsoft.com/library/system.windows.application.exit(v=vs.95).aspx">Application.Exit</a> events.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ActivationManager
</span>{
    <span style="color: blue">private static bool </span>initialized = <span style="color: blue">false</span>;
    <span style="color: green">// ...

</span><span style="color: gray">    </span><span style="color: blue">public </span>ActivationManager()
    {
        <span style="color: blue">if </span>(!initialized)
        {
<strong>            <font></font></strong><strong>Init();</strong>
<font></font>            initialized = <span style="color: blue">true</span>;
        }
    }

    <span style="color: green">// ...

    </span><span style="color: blue">private static void </span>Init()
    {
<strong>        <span style="color: #2b91af">Application</span>.Current.Startup += (s, e) =&gt; RunApplicationStartupMethods();
        <span style="color: #2b91af">Application</span>.Current.Exit += (s, e) =&gt; RunApplicationExitMethods();</strong>
    }

    <span style="color: green">// ...
</span>}</pre>
<p>&#160;</p>
<p>This way, when the <em>Silverlight for Windows Phone</em> engine rises those events, the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a> iterates throughout all loaded assemblies in the phone application looking for <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationStartupMethodAttribute.cs">ApplicationStartupMethod</a> and <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ApplicationExitMethodAttribute.cs">ApplicationExitMethod</a> assembly attributes and invoking the corresponding methods.</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ActivationManager
</span>{
    <span style="color: green">// ...
    </span><span style="color: blue">private static bool </span>loadAssemblyParts = <span style="color: blue">false</span>;
    <span style="color: blue">private static bool </span>assemblyPartsLoaded = <span style="color: blue">false</span>;

    <span style="color: green">// ...

    </span><span style="color: blue">private static void </span>RunActivationMethods&lt;T&gt;() <span style="color: blue">where </span>T : <span style="color: #2b91af">BaseActivationMethodAttribute
    </span>{
        <span style="color: blue">var </span>deploymentParts = <span style="color: #2b91af">Deployment</span>.Current.Parts.Cast&lt;<span style="color: #2b91af">AssemblyPart</span>&gt;();

        <span style="color: green">// Load all deployment assembly parts based on the LoadAssemblyParts flag
        // in case they include activation attributes.
        </span><span style="color: blue">if </span>(loadAssemblyParts &amp;&amp; !assemblyPartsLoaded)
        {
            Load(deploymentParts);
            assemblyPartsLoaded = <span style="color: blue">true</span>;
        }

        <span style="color: green">// Filter loaded assemblies to only get the deployment assembly parts.
        </span><span style="color: blue">var </span>activationAssemblies = <span style="color: #2b91af">AppDomain</span>.CurrentDomain.GetAssemblies()
            .Where(a =&gt; deploymentParts.Any(p =&gt; p.Source.Equals(a.ManifestModule.Name, <span style="color: #2b91af">StringComparison</span>.OrdinalIgnoreCase))
                        &amp;&amp; (a != <span style="color: blue">typeof</span>(<span style="color: #2b91af">ActivationManager</span>).Assembly))
            .ToList();
        <span style="color: blue">var </span>activationAttributes = <span style="color: blue">new </span><span style="color: #2b91af">List</span>&lt;T&gt;();

        <span>// Iterate throughout all the loaded deployment assembly parts to look for activation attributes.
<strong>        </strong></span><strong>activationAssemblies.ForEach(assembly =&gt; activationAttributes.AddRange(assembly.GetActivationAttributes&lt;T&gt;()));</strong><font></font>

        <span style="color: green">// Execute activation methods according to the order specified.
        </span><span style="color: blue">foreach </span>(<span style="color: blue">var </span>attribute <span style="color: blue">in </span>activationAttributes.<font></font><strong>OrderBy(at =&gt; at.Order)</strong><font></font>)
        {
<strong>            attribute.InvokeMethod();</strong><font></font>
        }
    }

    <span style="color: green">// ...
</span>}</pre>
<p>&#160;</p>
<p>By default, the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a> class will <u>not</u> discover assembly attributes in assembly parts that are not loaded into the application domain. If you want to change this to let the <a href="https://github.com/mconverti/silverlightactivator/blob/master/SilverlightActivator_WP/ActivationManager.cs">ActivationManager</a> load all the assembly parts at startup to look for activation attributes, you only need to set the <strong>LoadAssemblyParts</strong> property to <em>True</em> in the <strong>App.xaml</strong> application resource.</p>
<pre class="code"><span style="color: blue">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;</span><span style="color: #a31515">Application
    </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Class</span><span style="color: blue">=&quot;PhoneApp2.App&quot;
    </span><span style="color: red">xmlns</span><span style="color: blue">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
</span><span style="color: blue">    </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">shell</span><span style="color: blue">=&quot;clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone&quot;
    </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">x</span><span style="color: blue">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">silverlightactivator</span><span style="color: blue">=&quot;clr-namespace:SilverlightActivator;assembly=SilverlightActivator&quot;&gt;

    </span><span style="color: green">&lt;!--Application Resources--&gt;
    </span><span style="color: blue">&lt;</span><span style="color: #a31515">Application.Resources</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">ResourceDictionary</span><span style="color: blue">&gt;
            &lt;</span><span style="color: #a31515">ResourceDictionary.MergedDictionaries</span><span style="color: blue">&gt;
            &lt;/</span><span style="color: #a31515">ResourceDictionary.MergedDictionaries</span><span style="color: blue">&gt;

<strong>            &lt;</strong></span><strong><span style="color: #a31515">silverlightactivator</span><span style="color: blue">:</span></strong><strong><span style="color: #a31515">ActivationManager
                </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Name</span></strong><strong><span>=&quot;SilverlightActivator&quot;
                </span><span style="color: red">LoadAssemblyParts</span></strong><span><strong>=&quot;True&quot;<font></font> /&gt;
</strong>        &lt;/</span><span style="color: #a31515">ResourceDictionary</span><span style="color: blue">&gt;
    &lt;/</span><span style="color: #a31515">Application.Resources</span><span style="color: blue">&gt;

    </span><span style="color: green">&lt;!--...--&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">Application</span><span style="color: blue">&gt;
</span></pre>
<p>&#160;</p>
<p>Feedback is always welcome,</p>
<p>Mariano</p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/5QDaqWdGj_I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2011/11/13/introducing-silverlight-activator-for-windows-phone-nuget-package/</feedburner:origLink></item>
		<item>
		<title>OData Service for Team Foundation Server 2010 Beta released!</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/EEqZobQzqag/</link>
		<comments>http://blogs.southworks.net/mconverti/2011/04/09/odata-service-for-team-foundation-server-2010-beta-released/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 00:36:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[OData]]></category>
		<category><![CDATA[OData Service for Team Foundation Server]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[TFS Client Object Model]]></category>
		<category><![CDATA[WebMatrix]]></category>
		<category><![CDATA[WCF Data Service Toolkit]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/2011/04/09/odata-service-for-team-foundation-server-2010-beta-released/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2011/04/09/odata-service-for-team-foundation-server-2010-beta-released/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 7px 7px 0px; padding-left: 0px; padding-right: 0px; float: left; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/04/image.png" border="0" alt="image" width="237" height="110" align="left" /> Yesterday, Brian Keller (Sr. Technical Evangelist for Team Foundation Server) <a href="http://blogs.msdn.com/b/briankel/archive/2011/04/07/odata-service-for-team-foundation-server-2010.aspx">announced</a> in his <a href="http://blogs.msdn.com/b/briankel/">blog</a> the beta release of the <strong><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d6f8968c-f27f-43fb-88ae-8805db257a67">OData Service for Team Foundation Server 2010</a></strong>. The purpose of this project is to help developers to work with data from Team Foundation Server on multiple types of devices (such as smartphones and tablets) and operating systems. This OData service is built upon the <a href="http://wcfdstoolkit.codeplex.com/">WCF Data Services Toolkit</a> and uses the <a href="http://msdn.microsoft.com/library/bb130146.aspx">Client Object Model</a> to interact with Team Foundation Server 2010.</p>
<p>OData provides a great solution for this service’s goal, since the existing Team Foundation Server 2010 Client Object Model only works for applications developed on the Windows platform. OData, on the other hand, is built upon Web technologies and therefore it is accessible from any platform which supports HTTP requests.</p>
<p>This OData service works in the scope of an specific <a href="http://msdn.microsoft.com/library/dd236915.aspx">TFS Project Collection</a>, and the resources that you can query are Builds, Changesets, Changes, Builds, Branches, Work Items, Attachments, Projects, Queries and Area Paths. Since this service is secured with <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">Basic Authentication</a>, you can easily execute queries from any Web browser and see the results as a feed.</p>
<p>To get more context and details about the OData Service for Team Foundation Server 2010 you can check the following resources:</p>
<ul>
<li>Announcement: <a title="http://blogs.msdn.com/b/briankel/archive/2011/04/07/odata-service-for-team-foundation-server-2010.aspx" href="http://blogs.msdn.com/b/briankel/archive/2011/04/07/odata-service-for-team-foundation-server-2010.aspx">http://blogs.msdn.com/b/briankel/archive/2011/04/07/odata-service-for-team-foundation-server-2010.aspx</a></li>
<li>Download: <a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=d6f8968c-f27f-43fb-88ae-8805db257a67" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d6f8968c-f27f-43fb-88ae-8805db257a67">http://www.microsoft.com/downloads/details.aspx?FamilyID=d6f8968c-f27f-43fb-88ae-8805db257a67</a></li>
<li>Brian Keller’s Channel 9 video: <a title="http://channel9.msdn.com/Blogs/briankel/OData-Service-for-Team-Foundation-Server-2010" href="http://channel9.msdn.com/Blogs/briankel/OData-Service-for-Team-Foundation-Server-2010">http://channel9.msdn.com/Blogs/briankel/OData-Service-for-Team-Foundation-Server-2010</a></li>
<li>CodePlex OData API Preview (online version targeting CodePlex TFS): <a href="https://codeplexodata.cloudapp.net">https://codeplexodata.cloudapp.net</a></li>
<li>Open Data Protocol (OData): <a href="http://www.odata.org">http://www.odata.org</a></li>
</ul>
<h2>Content</h2>
<p>The <strong>ODataForTFS2010-SampleSetup-Beta.exe</strong> self-extractable package that you download from Microsoft Download Center contains the following items:</p>
<ul>
<li><strong>Configuration Wizard</strong> to check the software requirements and setup your local IIS for the OData service for TFS</li>
<li><strong>Readme</strong> document with detailed information about the available operations and how to configure the service and samples</li>
<li><strong>Source code</strong> and <strong>unit tests </strong>of the OData service for TFS</li>
<li>Sample <strong>Console client</strong> that lets you test the write operations (create / update work items and upload attachments to them)</li>
<li>Sample <strong>Windows Phone 7 client application</strong> that uses the <a href="http://odata.codeplex.com/">OData client library for Windows Phone</a> to consume the OData service for TFS</li>
<li><strong>ODataForTFS Helper for WebMatrix</strong> that uses the <a href="http://odatahelper.codeplex.com/">OData Helper for WebMatrix</a> to consume the OData service for TFS (there is also available detailed documentation for this helper and a WebMatrix sample application that uses it)</li>
</ul>
<p><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/04/image5.png" border="0" alt="image" width="670" height="579" /></p>
<p>Additionally, you can check the <strong><a href="https://codeplexodata.cloudapp.net/">CodePlex OData API Preview</a></strong> which is an online version of the OData service for TFS deployed in Windows Azure that specifically targets CodePlex TFS. You will find all the information needed to work with CodePlex OData API in the online documentation at <a href="https://codeplexodata.cloudapp.net">https://codeplexodata.cloudapp.net</a>.</p>
<p><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/04/image6.png" border="0" alt="image" width="670" height="495" /></p>
<p>Enjoy</p>
<p>Mariano</p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/EEqZobQzqag" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2011/04/09/odata-service-for-team-foundation-server-2010-beta-released/</feedburner:origLink></item>
		<item>
		<title>Windows Azure Toolkit for Windows Phone 7 released!</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/BVbZbdZLKT8/</link>
		<comments>http://blogs.southworks.net/mconverti/2011/03/25/windows-azure-toolkit-for-windows-phone-7-released/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 22:21:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Silverlight for Windows Phone]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Windows Azure Toolkit for Windows Phone 7]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/2011/03/25/windows-azure-toolkit-for-windows-phone-7-released/</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2011/03/25/windows-azure-toolkit-for-windows-phone-7-released/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Last Wednesday, <a href="http://www.wadewegner.com/">Wade Wegner</a> announced in his <a href="http://www.wadewegner.com/2011/03/windows-azure-toolkit-for-windows-phone-7/">blog</a> the first release of the Windows Azure Toolkit for Windows Phone 7. This toolkit is designed to make it easier for developers to build Windows Phone applications that leverage cloud services running in Windows Azure. The toolkit includes Visual Studio project templates for Windows Phone 7 and Windows Azure, class libraries optimized for use on the phone, a sample application, and documentation (one thing to remark is that all the content is delivered in both <em>C#</em> and <em>Visual Basic</em>).</p>
<ul>
<li>Official announcement: <a title="http://www.wadewegner.com/2011/03/windows-azure-toolkit-for-windows-phone-7/" href="http://www.wadewegner.com/2011/03/windows-azure-toolkit-for-windows-phone-7/">http://www.wadewegner.com/2011/03/windows-azure-toolkit-for-windows-phone-7/</a></li>
<li>Download the toolkit: <a title="http://watoolkitwp7.codeplex.com/releases/view/61952" href="http://watoolkitwp7.codeplex.com/releases/view/61952">http://watoolkitwp7.codeplex.com/releases/view/61952</a></li>
<li>Online documentation: <a title="http://watoolkitwp7.codeplex.com/documentation" href="http://watoolkitwp7.codeplex.com/documentation">http://watoolkitwp7.codeplex.com/documentation</a></li>
<li>Cloud Cover Episode: <a title="http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-41-Windows-Azure-Toolkit-for-Windows-Phone-7" href="http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-41-Windows-Azure-Toolkit-for-Windows-Phone-7">http://channel9.msdn.com/Shows/Cloud+Cover/Cloud-Cover-Episode-41-Windows-Azure-Toolkit-for-Windows-Phone-7</a></li>
</ul>
<p>After downloading the <strong>WAZToolkitForWP7.Setup.exe</strong> self-extractable package from CodePlex and running it, execute the <strong>Setup.exe</strong> command to launch the Configuration Wizard. This tool will check the software requirements and then run the appropriate VSIX files to install the project templates in the different Visual Studio editions.</p>
<p>When you finish configuring your environment, make sure to review the <strong>Readme.htm</strong> file to get more context about the toolkit and all its content.</p>
<p><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/03/image.png" border="0" alt="Getting started witht the WAz Toolkit for WP7" width="645" height="563" /></p>
<p>As I said before, the toolkit ships with <em>project templates</em> and a <em>sample application</em> among other things. Both of these assets make use of a set of <a href="#services">services</a> and a <a href="#client-library">phone client library</a> that you can reuse to build your own phone applications.</p>
<h2><a name="services"></a>Toolkit Services</h2>
<p>One of the main purpose of the services included in this toolkit is to provide a secure location where to put the azure storage account name and key. This means that you can avoid including this information inside your phone application, and instead rely on any other authentication &amp; authorization mechanisms to secure the content in your storage (like ASP.NET Membership and Roles providers).</p>
<p>The toolkit services are hosted in an ASP.NET MVC 2 Web role with the following endpoints:</p>
<div>
<div style="margin: 0px; width: 180px; float: left; padding: 0px;"><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/03/image1.png" border="0" alt="Toolkit Services" width="180" /></div>
<div style="margin: 0px; width: 435px; float: left; padding: 0px;">
<ul style="padding-bottom: 0px; margin: 7px; padding-top: 0px;">
<li><strong>~/AuthenticationService</strong>: This is a WCF REST service that exposes operations to register new users and get an authentication token. Before consuming any other service, you need to obtain a token from this service and then using it to authenticate your requests.<br />
<em><span style="text-decoration: underline;">Note</span>: Both the authentication and authorization mechanisms rely on the ASP.NET Membership and Roles providers for Azure Tables. The binaries and source code of these ASP.NET providers are also included in the toolkit.</em></li>
<li><strong>~/AzureTablesProxy.axd</strong>: This is an HTTP handler that acts as a proxy for the Windows Azure Tables REST API. All the requests that are addressed to this endpoint are <em>forwarded</em> to the real Azure Tables endpoint and signed with the storage account key.</li>
<li><strong>~/SharedAccessSignatureService</strong>: This is a WCF REST service that generates <a href="http://msdn.microsoft.com/library/ee395415.aspx">Shared Access Signatures</a> to work with containers and blobs.</li>
</ul>
</div>
</div>
<p>Additionally, a Web site is provided along with the services to manage authorization permissions for the different users.</p>
<p><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/03/image2.png" border="0" alt="image" width="645" height="455" /></p>
<h2><a name="client-library"></a>Windows Phone 7 Code Library and Sample Application</h2>
<p>The toolkit includes the binaries and source code of an Azure storage client library for Windows Phone 7 called <strong>WindowsPhoneCloud.StorageClient</strong>. This client library allows Windows Phone developers to:</p>
<ul>
<li>Create and delete Azure Tables</li>
<li>Perform CRUD operations on Azure Tables’ rows</li>
<li>Upload blobs to a private / public containers using Shared Access Signatures</li>
<li>List blobs in a private / public container using Shared Access Signatures</li>
</ul>
<p>The phone application that you can find in the <em>sample application</em> solution and <em>project templates</em>, showcases the previous features in different pages.</p>
<p><img style="padding-left: 0px; padding-right: 0px; padding-top: 0px; border-width: 0px;" src="http://blogs.southworks.net/mconverti/files/2011/03/image3.png" border="0" alt="image" width="645" height="835" /></p>
<p>Enjoy</p>
<p>Mariano</p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/BVbZbdZLKT8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2011/03/25/windows-azure-toolkit-for-windows-phone-7-released/</feedburner:origLink></item>
		<item>
		<title>SQL Server 2008 R2 Update for Developers Training Kit (June 2010 Update) – RTM Refresh Released!</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/IV-zQoLPyzM/</link>
		<comments>http://blogs.southworks.net/mconverti/2010/06/14/sql-server-2008-r2-update-for-developers-training-kit-june-2010-update-rtm-refresh-released/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 18:38:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[Excel 2010]]></category>
		<category><![CDATA[PerformancePoint Services]]></category>
		<category><![CDATA[PowerPivot for Excel]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint 2010]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=170</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2010/06/14/sql-server-2008-r2-update-for-developers-training-kit-june-2010-update-rtm-refresh-released/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p></img><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="SQL Server 2008 R2" src="http://blogs.southworks.net/mconverti/files/2010/06/sql2008r2.png" width="400" height="75" /> </p>
<p>Today Roger announced in his <a href="http://blogs.msdn.com/b/rdoherty/archive/2010/06/14/sql-server-2008-r2-update-for-developers-training-kit-june-2010-update.aspx">blog</a> the availability of the <strong>SQL Server 2008 R2 Update for Developers Training Kit (June 2010 Update)</strong>. This is the final update for this training kit and includes two additional modules covering SQL Server 2008 R2 related improvements in Excel 2010 and SharePoint 2010. Additionally, there were many updates to the original content in previous versions of the training kit to address changes in the final RTM release of SQL Server 2008 R2 (e.g. some UI changes, modifications in the API, minor bug fixing, etc).</p>
<p>You can download this new release at:</p>
<ul style="padding-top: 0px">
<li><a href="http://go.microsoft.com/?linkid=9710868">http://go.microsoft.com/?linkid=9710868</a> (notice that is the same URL of previous releases) </li>
</ul>
<h3>New modules added to the Training Kit</h3>
<p><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="Excel 2010 &amp; Sharepoint 2010" src="http://blogs.southworks.net/mconverti/files/2010/06/excel2010sharepoint2010.png" width="330" height="95" /> </p>
<p>As I said previously, the <strong>Excel 2010</strong> and <strong>SharePoint 2010</strong> modules were included in the RTM release related with SQL Server 2008 R2 improvements:</p>
<ul style="padding-top: 0px">
<li><strong><a href="http://blogs.southworks.net/mconverti/files/2010/06/excel2010.png"><img style="margin-left: 0px;margin-right: 0px" border="0" alt="Excel 2010 Module" align="right" src="http://blogs.southworks.net/mconverti/files/2010/06/excel2010-thumb.png" width="245" height="227" /></a> <u>Excel 2010</u></strong>: Excel is the most popular data analysis tool in the world, and Excel 2010 offers a range of powerful data analysis and visualization improvements that makes it the ideal self-service analysis client. Slicers are new visual controls that provide quick, easy and interactive filtering. Sparklines are intense, simple word-sized graphics that make it easy to visualize data in-line with numbers. PivotTables support powerful new capabilities like named sets, what-if analysis (write-back), and pre-built calculations like percent of total, running totals and ranks. Charting has also been improved with an easier user interface, faster performance and expanded limits. SQL Server 2008 R2 introduces PowerPivot for Excel, a free Excel add-in that makes it possible for information workers to create their own powerful analytic models by combining and relating data from a wide variety of data sources. </li>
<li><strong><a href="http://blogs.southworks.net/mconverti/files/2010/06/sharepoint2010.png"><img style="margin-left: 0px;margin-right: 0px" border="0" alt="SharePoint 2010 Module" align="right" src="http://blogs.southworks.net/mconverti/files/2010/06/sharepoint2010-thumb.png" width="245" height="225" /></a> <u>SharePoint 2010</u></strong>: SharePoint 2010 is the most popular business collaboration platform in the world for organizations of all sizes, and SharePoint 2010 Insights lets everyone access the business information they need to make good decisions. SharePoint 2010 Insights uses well-known applications and interfaces, people are comfortable from the start, and they know how to get the data they need. Excel Services makes it easy for anyone to publish their Excel workbooks in SharePoint 2010, including workbooks that use data from SQL Server 2008 R2 Analysis Services. From there, an entire team can access and analyze the same data from their web browser and rest assured that everyone has the right information. PerformancePoint Services is a new integrated capability in SharePoint 2010 Enterprise Edition that makes it easy to build flexible, highly interactive scorecards and dashboards using data from SQL Server 2008 R2 Analysis Services. SQL Server 2008 R2 PowerPivot for SharePoint makes it easy to publish analytic models created with SQL Server PowerPivot for Excel to SharePoint 2010 and share them with other users with Excel Services. SQL Server 2008 R2 Reporting Services supports SharePoint 2010 integration, making it easy to publish and access reports using familiar SharePoint paradigms. </li>
</ul>
<h3>Requirements</h3>
<ul style="padding-top: 0px">
<li><a href="http://www.microsoft.com/sqlserver/2008/en/us/R2Downloads.aspx">Microsoft SQL Server 2008 R2</a> </li>
<li><a href="http://www.microsoft.com/visualstudio/try/default.mspx">Microsoft Visual Studio 2010</a> </li>
<li><a href="http://www.microsoft.com/office/2010/download-office-professional-plus/">Microsoft Office 2010 Excel</a> </li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=155905">Microsoft SQL Server PowerPivot for Excel</a> </li>
<li><a href="http://www.microsoft.com/sqlserver/2008/en/us/R2-complex-event.aspx#download">Microsoft SQL Server 2008 R2 StreamInsight</a> </li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d3173a87-7c0d-40cc-a408-3d1a43ae4e33">Microsoft SQL Server 2008 R2 Report Builder 3.0</a> </li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=43162af5-5b7b-40e0-b879-a77dac8f58bc">Microsoft SharePoint Server 2010</a> </li>
</ul>
<p>Enjoy</p>
<p>Mariano</p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/IV-zQoLPyzM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2010/06/14/sql-server-2008-r2-update-for-developers-training-kit-june-2010-update-rtm-refresh-released/</feedburner:origLink></item>
		<item>
		<title>SQL Server 2008 R2 Update for Developers Training Kit – March 2010 Update 2 Released!</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/h_48d4Q2d3U/</link>
		<comments>http://blogs.southworks.net/mconverti/2010/03/31/sql-server-2008-r2-update-for-developers-training-kit-march-2010-update-2-released/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 21:14:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[DPE]]></category>
		<category><![CDATA[Data-tier Applications]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[StreamInsight]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=163</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2010/03/31/sql-server-2008-r2-update-for-developers-training-kit-march-2010-update-2-released/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>Last Friday, Roger announced in his <a href="http://blogs.msdn.com/rdoherty/archive/2010/03/26/sql-server-2008-r2-update-for-developers-training-kit-march-2010-update-2.aspx">blog</a> the availability of a new release of the <strong>SQL Server 2008 R2 Update for Developers Training Kit</strong>. This update contains new modules for <a href="#AMM-Module">Application and Multi-Server Management</a> and <a href="#StreamInsight-Module">StreamInsight</a> with a lot of content for developers that want to learn and adopt these new features in SQL Server 2008 R2.</p>
<p>You can download the training kit from the Microsoft Download Center at:</p>
<ul>
<li><a href="http://go.microsoft.com/?linkid=9710868">http://go.microsoft.com/?linkid=9710868</a> (notice that is the same URL of previous releases) </li>
</ul>
<p>If you do not want to download the training kit, but you do want to check what is inside it, you can review its content online in the <a href="http://channel9.msdn.com/learn/courses/">Channel 9 Learning Center Courses</a> at:</p>
<ul>
<li><a href="http://channel9.msdn.com/learn/courses/SQL2008R2TrainingKit">http://channel9.msdn.com/learn/courses/SQL2008R2TrainingKit</a> </li>
</ul>
<h3><a name="AMM-Module"></a>New &#8216;Application and Multi-Server Management&#8217; module</h3>
<p><a href="http://blogs.southworks.net/mconverti/files/2010/03/ammmodule.png"><img style="margin-left: 0px;margin-right: 0px" border="0" alt="Application and Multi-Server Management module" align="left" src="http://blogs.southworks.net/mconverti/files/2010/03/ammmodule-thumb.png" width="333" height="261" /></a>SQL Server 2008 R2 introduces a set of improvements known as Application and Multi-Server Management (AMM) designed to reduce the cost and complexity of managing database servers and applications, and to help customers get more out of their SQL Server investments. Administrators can register all of their SQL Server instances and automatically collect data on utilization using a new role called a Utility Control Point (UCP). This data is consolidated and visualized using the new Utility Explorer in SQL Server Management Studio, allowing administrators to quickly isolate utilization problems and make more informed consolidation decisions.</p>
<p>This utilization data provides consolidated insight for both database server instances and database applications that are built using new data-tier application projects in Visual Studio 2010. Developers can now build a single unit of deployment for the data-tier portion of an application known as a DACPAC. A DACPAC contains metadata that describes all of the objects in a database application, as well as policies which govern their deployment.</p>
<p>A single DACPAC can be handed off to an administrator to deploy instead of collections of complicated Transact-SQL scripts. SQL Server 2008 R2 automatically evaluates the policies in the DACPAC during deployment for compliance, creates the associated database objects and registers the data-tier application. Upgrades are performed automatically from one version of a data-tier application to another, eliminating the need for administrators to perform manual upgrades.</p>
<p>If the database server is registered with a Utility Control Point, utilization data will be automatically collected for all registered data-tier applications and made visible in the Utility Explorer, enriching the administrator&#8217;s insight.</p>
<p>&#160;</p>
<div></div>
<h3><a name="StreamInsight-Module"></a>New &#8216;StreamInsight&#8217; module</h3>
<p><a href="http://blogs.southworks.net/mconverti/files/2010/03/streaminsightmodule.png"><img style="margin-left: 0px;margin-right: 0px" border="0" alt="StreamInsight-Module" align="right" src="http://blogs.southworks.net/mconverti/files/2010/03/streaminsightmodule-thumb.png" width="333" height="271" /></a> SQL Server 2008 R2 introduces StreamInsight, a comprehensive development platform for building event-driven applications. While typical relational database applications are query-driven, event-driven applications are characterized by high event data rates, continuous standing queries, and millisecond latency requirements that make it impractical to store the data in a relational database for processing.</p>
<p>Event driven application workloads are common in many different industries, including manufacturing, oil and gas, utilities, financial services, health care, retail, web analytics, and data center monitoring. Developers turn to complex event processing (CEP) technology like StreamInsight to query, monitor and identify patterns and relationships from huge volumes of seemingly unrelated events, then trigger response actions when specific conditions are met.</p>
<p>&#160;</p>
<div></div>
<h3>Related Resources</h3>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff381683.aspx">Data-tier Application Whitepaper</a> </li>
<li><a href="http://msdn.microsoft.com/library/ee210554%28SQL.105%29.aspx">Data-tier Application Tutorials</a> </li>
<li><a href="http://msdn.microsoft.com/library/ee362541(SQL.105).aspx">Microsoft StreamInsight Documentation</a> </li>
</ul>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/h_48d4Q2d3U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2010/03/31/sql-server-2008-r2-update-for-developers-training-kit-march-2010-update-2-released/</feedburner:origLink></item>
		<item>
		<title>SQL Server 2008 R2 Update for Developers Training Kit Released!</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/jr2uL9HTXdc/</link>
		<comments>http://blogs.southworks.net/mconverti/2010/02/08/sql-server-2008-r2-update-for-developers-training-kit-released/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 03:07:00 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[DPE]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=158</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2010/02/08/sql-server-2008-r2-update-for-developers-training-kit-released/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px" border="0" alt="Microsoft SQL Server 2008 R2" src="http://blogs.southworks.net/mconverti/files/2010/02/sqlserver2008r2logo-thumb.png" width="240" height="44" /></p>
<p>As Roger announced in his <a href="http://blogs.msdn.com/rdoherty/archive/2010/02/03/announcing-the-sql-server-2008-r2-update-for-developers-training-kit.aspx">blog</a>, the first release of the <strong>SQL Server 2008 R2 Update for Developers Training Kit</strong> is available for free download from the Microsoft Download center at:</p>
<ul>
<li><a title="http://go.microsoft.com/?linkid=9710868" href="http://go.microsoft.com/?linkid=9710868">http://go.microsoft.com/?linkid=9710868</a> </li>
</ul>
<p>The SQL Server 2008 R2 Update for Developers Training Kit is ideal for developers who want to understand how to take advantage of the key improvements introduced in <strong>Microsoft SQL Server 2008</strong> and <strong>Microsoft SQL Server 2008 R2</strong> in their applications, as well as for developers who are new to SQL Server.</p>
<p>Stay tuned because new releases of this training kit are going to be published every two weeks approximately containing new labs, demos, presentations and videos related to SQL Server 2008 R2 features.</p>
<h3>Training Kit Content</h3>
<p>This release contains all the original content from the <a href="http://go.microsoft.com/?linkid=9665942">SQL Server 2008 Developer Training Kit</a> (but targeting <strong>Microsoft SQL Server 2008 R2</strong>) and also the following new one:</p>
<ul>
<li><strong>How to build your first web application with SQL Server and ASP.NET</strong>: This hands-on lab shows how to connect to SQL Server and perform Create, Read, Update and Delete (CRUD) operations on SQL Server 2008 from an ASP.NET Web application. It also shows you how to work with images stored in SQL Server in a web application. This lab is ideal for developers who are new to building web applications with SQL Server and ASP.NET. </li>
<li><strong>Data-tier Applications in SQL Server 2008 R2 and Visual Studio 2010</strong>: This hands-on lab shows how to perform the basic steps in creating, developing, deploying, managing and upgrading a Data-tier Application (DAC) using the new features in Microsoft SQL Server 2008 R2 and Microsoft Visual Studio 2010. It also shows some of the new IDE tools and enhancements included in Microsoft Visual Studio 2010 to work with Database projects. </li>
<li><strong>Introduction To StreamInsight and Complex Event Processing</strong>: Microsoft SQL Server StreamInsight is Microsoft&#8217;s new Complex Event Processing technology to help businesses derive better insights by correlating event streams from multiple sources with near-zero latency. This hands-on lab shows how to leverage the new StreamInsight framework released as part of Microsoft SQL Server 2008 R2 while developing a StreamInsight sample application. It also explains the basics about Complex Event Processing. </li>
<li><strong>Using the New Features of Reporting Services 2008 R2</strong>: This hands-on lab introduces the new features included in Microsoft SQL Server 2008 R2 Reporting Services like the Map Wizard to display geospatial data, the lookup functions in report expressions so that data from multiple datasets can be shown in a single data region and the capability to export report data to an Atom data feed. It also shows the new features in Report Builder 3.0. </li>
<li><strong>PowerPivot in SQL Server 2008 R2</strong>: This hands-on lab introduces to the Microsoft SQL Server PowerPivot for Excel 2010 add-in and shows how to load data into it and how to create PowerPivot pivot tables. It also introduces DAX expressions for multidimensional calculations against PowerPivot data and explains how to publish PowerPivot workbooks to Microsoft SQL Server PowerPivot for SharePoint 2010. </li>
<li><strong>7 Introductory Videos</strong>: these videos introduce and review the new features and enhancements in Microsoft SQL Server 2008 and Microsoft SQL Server 2008 R2.
<ul>
<li>SQL Server 2008 R2 Update for Developers Overview Part I &#8211; SQL Server 2008 Review </li>
<li>SQL Server 2008 R2 Update for Developers Overview Part II &#8211; Introducing SQL Server 2008 R2 </li>
<li>Introducing SQL Server 2008 R2 StreamInsight </li>
<li>Demo: Real Time Analytics with SQL Server 2008 R2 StreamInsight </li>
<li>Introducing SQL Server 2008 R2 Application and Multi-Server Management </li>
<li>Introducing SQL Server 2008 R2 Reporting Services </li>
<li>Introducing PowerPivot for Excel 2010 and SharePoint 2010 </li>
</ul>
</li>
</ul>
<p><a href="http://blogs.southworks.net/mconverti/files/2010/02/sqlserver2008r2tk.png"><img style="float: none;margin-left: auto;margin-right: auto" border="0" alt="SQL Server 2008 R2 Update for Developers Training Kit" src="http://blogs.southworks.net/mconverti/files/2010/02/sqlserver2008r2tk-thumb.png" width="586" height="480" /></a></p>
<h3>Resources</h3>
<ul>
<li><a href="http://www.microsoft.com/sqlserver/2008/en/us/R2Downloads.aspx">Microsoft SQL Server 2008 R2 November CTP</a> </li>
<li><a href="http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24854">AdventureWorks 2008 R2 Sample Databases</a> </li>
<li><a href="http://www.microsoft.com/visualstudio/try/default.mspx">Microsoft Visual Studio 2010 Ultimate 2010 Beta 2</a> </li>
<li><a href="http://www.powerpivot.com/download.aspx">Microsoft SQL Server PowerPivot for Excel</a> </li>
<li><a href="http://www.microsoft.com/office/2010/">Microsoft Office 2010 Excel Beta</a> </li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=77c30c6c-47fc-416d-88e7-8122534b3f37">Microsoft SharePoint Server 2010 Beta</a> </li>
</ul>
<p>Enjoy</p>
<p>Mariano</p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/jr2uL9HTXdc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2010/02/08/sql-server-2008-r2-update-for-developers-training-kit-released/</feedburner:origLink></item>
		<item>
		<title>Optional Checkable Tree View Control for .NET Compact Framework 3.5</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/LWR9BQ_ye_M/</link>
		<comments>http://blogs.southworks.net/mconverti/2009/06/22/optional-checkable-tree-view-control-for-net-compact-framework-35/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 09:02:59 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[.NET Compact Framework]]></category>
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=126</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2009/06/22/optional-checkable-tree-view-control-for-net-compact-framework-35/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<div style="height: 202px">
<p><a href="http://blogs.southworks.net/mconverti/files/2009/06/mobilecompactframework10.png"><img style="margin-left: 0px;margin-right: 0px" src="http://blogs.southworks.net/mconverti/files/2009/06/mobilecompactframework-thumb10.png" border="0" alt="Windows Mobile" width="138" height="191" align="left" /></a>During this month I was working with my teammates <a href="http://blogs.southworks.net/jdominguez/">Julian Dominguez</a> and <a href="http://blogs.southworks.net/dperez">Diego Perez</a> on a project that targeted <strong>Window Mobile 6.0</strong> and the <strong>.NET Compact Framework 3.5</strong>. The main objective of this project was to create a module for an existing mobile application to let users perform different surveys and allowing them to navigate and filter through the questions and answers (between other things).</p>
</div>
<p>Among all the requirements for this project, there was one that asked for a view to show a hierarchical list of the questions / answers of the survey grouped by their types. The special thing about this view was that only some items of the hierarchical list should be checkable. Julian and I tried to use the <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview(VS.80).aspx">TreeView</a> control included in the .NET Compact Framework, but this control does not allow you to choose which items are checkable and which are not. So we decided to extend the default TreeView and create an optional checkable TreeView control. These were the results:</p>
<p><a href="http://blogs.southworks.net/mconverti/files/2009/06/treeviewcontrols1.png"><img src="http://blogs.southworks.net/mconverti/files/2009/06/treeviewcontrols-thumb1.png" border="0" alt="Tree View Controls" width="555" height="377" /></a> </p>
<p>As you can see, in the default <strong>TreeView</strong> control (on the left) all the nodes has check boxes even the ones that are expandable. In the <strong>OptionalCheckableTreeView</strong> control (on the right) the expandable nodes are not checkable.</p>
<h3>Implementation Details</h3>
<p>Instead of setting the <a href="http://msdn.microsoft.com/library/system.windows.forms.treeview.checkboxes(VS.80).aspx"><span style="color: #669966">CheckBoxes</span></a> property of the TreeView to true, we are using images to display the check boxes (either in checked or unchecked state) and the minus and plus icons to expand the tree.</p>
<p>To accomplish this we had to add support for the <strong>NodeMouseClick</strong> event, which is not available in the .NET Compact Framework. This event allows us to check / uncheck / expand / collapse the clicked node and also change the image index. We followed the guidance provided in the following articles in <a href="http://msdn.microsoft.com/"><span style="color: #669966">MSDN</span></a>, with a few modifications:</p>
<ul>
<li><a href="http://msdn.microsoft.com/library/ms229683.aspx"><span style="color: #669966">How to: Use a Helper Class for Platform Invokes</span></a></li>
<li><a href="http://msdn.microsoft.com/library/ms229658.aspx"><span style="color: #669966">How to: Use a Class for Hooking Windows Procedures</span></a></li>
<li><a href="http://msdn.microsoft.com/library/ms229669.aspx"><span style="color: #669966">How to: Subclass a TreeView by Using Native Callbacks</span></a></li>
</ul>
<h3>Download</h3>
<p>Download the C# source code from <a href="http://blogs.southworks.net/mconverti/files/2009/06/optionalcheckabletreeview.zip">here</a>. The ZIP file contains the following:</p>
<ul>
<li><strong>OptionalCheckableTreeView.sln</strong>: Contains the source code for the <strong>OptionalCheckableTreeView</strong> control.</li>
<li><strong>OptionalCheckableTreeView.Sample.sln</strong>: Contains a sample application that uses the <strong>OptionalCheckableTreeView</strong> control.</li>
</ul>
<table border="1" cellspacing="0" cellpadding="2" width="520">
<tbody>
<tr>
<td width="520" valign="middle"><strong>Note</strong>: This code is provided “AS IS” with no warranties, and confers no rights.</td>
</tr>
</tbody>
</table>
<p>Feedback is always appreciated!</p>
<p>Mariano</p>
<div id="71e18c0a-c49d-4656-9e52-6788702ab44f" class="wlWriterEditableSmartContent" style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/Windows+Mobile+6.0">Windows Mobile 6.0</a>,<a rel="tag" href="http://technorati.com/tags/.NET+Compact+Framework+3.5">.NET Compact Framework 3.5</a>,<a rel="tag" href="http://technorati.com/tags/TreeView">TreeView</a></div>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fmconverti%2f2009%2f06%2f22%2foptional-checkable-tree-view-control-for-net-compact-framework-35%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fmconverti%2f2009%2f06%2f22%2foptional-checkable-tree-view-control-for-net-compact-framework-35%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/LWR9BQ_ye_M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2009/06/22/optional-checkable-tree-view-control-for-net-compact-framework-35/</feedburner:origLink></item>
		<item>
		<title>How To: Integrate a Prism v2 application with the Silverlight 3 Navigation Framework</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/w-3EMOF20DM/</link>
		<comments>http://blogs.southworks.net/mconverti/2009/04/12/how-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 23:15:07 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[Composite WPF & SL]]></category>
		<category><![CDATA[Navigation Framework]]></category>
		<category><![CDATA[Prism v2]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Silverlight 3]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=120</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2009/04/12/how-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The Silverlight 3 Beta release introduces a lot of new features and enhancements into the framework. One of them is <strong>Navigation</strong>, which allows us to easily implement navigation between UserControls / Pages, interact with the Browser History journal and define Uri mapping to map complex Uris with more friendly ones. To learn more about the Navigation Framework you can check the <a href="http://silverlight.net/learn/learnvideo.aspx?video=187319" target="_blank">Navigation Framework video</a> by <a href="http://timheuer.com/blog/">Tim Heuer</a>.</p>
<p>The purpose of this post is to provide an overview of the things that should be taken into account to use the Silverlight 3 Navigation Framework in a Prism v2 application, as well as the limitations / issues that you could come up with during the integration. I used the <a href="http://msdn.microsoft.com/en-us/library/dd490828.aspx">Remote Modularity QuickStart</a> (shipped with the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=fa07e1ce-ca3f-4b9b-a21b-e3fa10d013dd" target="_blank">Composite Application Guidance for WPF and Silverlight &#8211; February 2009</a>) as the base application and modified it to provide navigation among modules. As you can see in the image bellow, the original QS (in the left) shows all the modules at once and the updated one (in the right) provides navigation links to see each module page separately.</p>
<p><a href="http://blogs.southworks.net/mconverti/files/2009/04/remotemodularityqs.png"><img src="http://blogs.southworks.net/mconverti/files/2009/04/remotemodularityqs-thumb.png" border="0" alt="Remote Modularity QS using Navigation Framework" width="600" height="368" /></a></p>
<h3>System Requirements</h3>
<p>To be able to open the source code that accompanies this post and follow its guidance, you will need the following:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/vs2008/products/cc268305.aspx">Visual Studio 2008 SP1</a> or <a href="http://www.microsoft.com/express/vwd/">Visual Web Developer Express 2008 SP1</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=11dc7151-dbd6-4e39-878f-5081863cbb5d">Microsoft® Silverlight™ 3 Tools Beta 1 for Visual Studio 2008 SP1</a></li>
</ul>
<table border="1" cellspacing="0" cellpadding="2" width="550">
<tbody>
<tr>
<td width="548" valign="top"><strong>Note</strong>: Once you install the Silverlight 3 Beta Tools for Visual Studio, your development environment will be a Silverlight 3 Beta environment.  Visual Studio 2008 SP1 does not support multi-targeting for Silverlight applications so you will be unable to develop Silverlight 2 applications once these tools are installed.</td>
</tr>
</tbody>
</table>
<h3>Steps</h3>
<p>The following are the general steps that I performed to add navigation functionality to the <strong>Remote Modularity QuickStart</strong>, but they could also be reused in other Prism v2 applications:</p>
<ol>
<li>Add a reference to the <strong>System.Windows.Controls.Navigation</strong> assembly in the Shell project. This assembly contains the <strong>Frame</strong> and <strong>Page</strong> controls needed to navigate and the classes that allow the mapping of the Uris.</li>
<li>Add a <strong>Frame</strong> control to the Shell of the Silverlight application. The <strong>Frame </strong>control is the container for pages. It allows you to navigate to a Uri and exposes a bunch of useful events related to navigation.
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">UserControl </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Class</span><span style="color: blue">="RemoteModuleLoading.Shell"
   </span><span style="color: red"> …</span><span style="color: blue">
    </span><strong><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">navigation</span></strong><span style="color: blue"><strong>="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"</strong></span><span style="color: blue">&gt;
    …</span><span style="color: blue">
    &lt;</span><span style="color: #a31515">StackPanel</span><span style="color: blue">&gt;
        </span><span style="color: blue">&lt;</span><span style="color: #a31515">ItemsControl </span><strong><span style="color: red">cal</span><span style="color: blue">:</span><span style="color: red">RegionManager.RegionName</span><span style="color: blue">="LinkRegion"</span></strong><span style="color: blue">&gt;
            &lt;</span><span style="color: #a31515">ItemsControl.ItemsPanel</span><span style="color: blue">&gt;
                &lt;</span><span style="color: #a31515">ItemsPanelTemplate</span><span style="color: blue">&gt;
                    &lt;</span><span style="color: #a31515">StackPanel </span><span style="color: red">Orientation</span><span style="color: blue">="Horizontal"/&gt;
                &lt;/</span><span style="color: #a31515">ItemsPanelTemplate</span><span style="color: blue">&gt;
            &lt;/</span><span style="color: #a31515">ItemsControl.ItemsPanel</span><span style="color: blue">&gt;
            &lt;</span><span style="color: #a31515">ItemsControl.Items</span><span style="color: blue">&gt;
                &lt;</span><span style="color: #a31515">HyperlinkButton </span><span style="color: red">Content</span><span style="color: blue">="Home" </span><span style="color: red">Tag</span><span style="color: blue">="Home"
                     </span><span style="color: red">cmd</span><span style="color: blue">:</span><span style="color: red">Click.Command</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">NavigateCommand</span><span style="color: blue">}"
                     </span><span style="color: red">cmd</span><span style="color: blue">:</span><span style="color: red">Click.CommandParameter</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">RelativeSource</span><span style="color: blue">={</span><span style="color: #a31515">RelativeSource </span><span style="color: red">Self</span><span style="color: blue">}, </span><span style="color: red">Path</span><span style="color: blue">=Tag}" /&gt;
            &lt;/</span><span style="color: #a31515">ItemsControl.Items</span><span style="color: blue">&gt;
        &lt;/</span><span style="color: #a31515">ItemsControl</span><span style="color: blue">&gt;
        </span><span style="color: blue"><strong>&lt;</strong></span><strong><span style="color: #a31515">navigation</span><span style="color: blue">:</span><span style="color: #a31515">Frame </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Name</span><span style="color: blue">="MainFrame" </span><span style="color: red">Source</span></strong><span style="color: blue"><strong>="Home" /&gt;
</strong>    &lt;/</span><span style="color: #a31515">StackPanel</span><span style="color: blue">&gt;
    …</span><span style="color: blue">
&lt;/</span><span style="color: #a31515">UserControl</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
<li>Add a <strong>UriMapper</strong> to the Application Resources in the <strong>App.xaml</strong> file.
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">Application</span><span style="color: blue">
             </span><span style="color: red">…</span><span style="color: blue">
             </span><strong><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">navcore</span><span style="color: blue">="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"</span></strong><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">Application.Resources</span><span style="color: blue">&gt;</span><span style="color: blue">
        <strong>&lt;</strong></span><strong><span style="color: #a31515">navcore</span><span style="color: blue">:</span><span style="color: #a31515">UriMapper </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Key</span></strong><strong><span style="color: blue">="uriMapper"&gt;
            &lt;</span><span style="color: #a31515">navcore</span><span style="color: blue">:</span><span style="color: #a31515">UriMapping </span><span style="color: red">Uri</span><span style="color: blue">="Home" </span><span style="color: red">MappedUri</span></strong><strong><span style="color: blue">="/Views/Home.xaml" /&gt;
        &lt;/</span><span style="color: #a31515">navcore</span><span style="color: blue">:</span><span style="color: #a31515">UriMapper</span></strong><span style="color: blue"><strong>&gt;
</strong>    &lt;/</span><span style="color: #a31515">Application.Resources</span><span style="color: blue">&gt;
&lt;/</span><span style="color: #a31515">Application</span><span style="color: blue">&gt;</span></pre>
</li>
<li>Add UriMappings inside the <strong>Initialize</strong> method of the <strong>Module</strong> class of each module. The <strong>UriMapping</strong> class allows us to display a more user friendly Url in the browser. Defining this mapping inside each module avoids having them hard-coded inside the Shell project.
<pre><span style="color: blue">public void </span>Initialize()
{
    <strong>AddModuleUriMappings();</strong>

    <span style="color: blue">this</span>.regionManager.Regions[<span style="color: #a31515">"LinkRegion"</span>].Add(<span style="color: blue">new </span><span style="color: #2b91af">ModuleZLink</span>());
}

<span style="color: blue">private static void </span>AddModuleUriMappings()
{
    <strong><span style="color: #2b91af">UriMapper </span>mapper = (<span style="color: #2b91af">UriMapper</span>)<span style="color: #2b91af">Application</span>.Current.Resources[<span style="color: #a31515">"uriMapper"</span>];
    mapper.UriMappings.Add(<span style="color: blue">new </span><span style="color: #2b91af">UriMapping</span>()
                        {
                            Uri = <span style="color: blue">new </span><span style="color: #2b91af">Uri</span>(<span style="color: #a31515">"ModuleZ"</span>, <span style="color: #2b91af">UriKind</span>.Relative),
                            MappedUri = <span style="color: blue">new </span><span style="color: #2b91af">Uri</span>(<span style="color: #a31515">"/ModuleZ;component/DefaultViewZ.xaml"</span>,
                                                <span style="color: #2b91af">UriKind</span>.Relative)
                        });
</strong>}</pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
<li>For each module, add an <strong>UserControl</strong> containing an <strong>HyperlinkButton</strong> which points to the Uri previously mapped. This <strong>UserControl</strong> is added to the <strong>LinkRegion</strong> of the Shell when the module is initialized.
<pre><span style="color: blue">&lt;</span><span style="color: #a31515">UserControl </span><span style="color: red">x</span><span style="color: blue">:</span><span style="color: red">Class</span><span style="color: blue">="ModuleZ.ModuleZLink"
    </span><span style="color: red">xmlns</span><span style="color: blue">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">x</span><span style="color: blue">="http://schemas.microsoft.com/winfx/2006/xaml"
    </span><span style="color: red">xmlns</span><span style="color: blue">:</span><span style="color: red">cal</span><span style="color: blue">="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"&gt;

    &lt;</span><span style="color: #a31515">HyperlinkButton </span><span style="color: red">Content</span><span style="color: blue">="Module Z" </span><span style="color: red"><strong>Tag</strong></span><span style="color: blue"><strong>="ModuleZ"</strong>
                     </span><span style="color: red">cal</span><span style="color: blue">:</span><span style="color: red">Click.Command</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">NavigateCommand</span><span style="color: blue">}"
                     </span><span style="color: red">cal</span><span style="color: blue">:</span><span style="color: red">Click.CommandParameter</span><span style="color: blue">="{</span><span style="color: #a31515">Binding </span><span style="color: red">RelativeSource</span><span style="color: blue">={</span><span style="color: #a31515">RelativeSource </span><span style="color: red">Self</span><span style="color: blue">}, </span><span style="color: red">Path</span><span style="color: blue">=Tag}" /&gt;

&lt;/</span><span style="color: #a31515">UserControl</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td width="498" valign="top"><strong>Note</strong>: The value of the <strong>Tag</strong> property of the <strong>HyperlinkButton</strong> control is the Uri that will be used for navigate. Also notice that I’ve bound the <strong>Click</strong> event of the control to a <strong>NavigateCommand</strong>. </p>
<p>For more information related to commands, see <a href="http://msdn.microsoft.com/en-us/library/dd458928.aspx">Commands</a> article in Prism v2 documentation.</td>
</tr>
</tbody>
</table>
</li>
<li>Create a global <a href="http://msdn.microsoft.com/en-us/library/dd458862.aspx">CompositeCommand</a> to handle the navigation within the frame. In this way, all the links previously added will use the frame control defined in the Shell to perform the navigation when they are clicked.
<pre><span style="color: blue">public </span>Shell(<span style="color: #2b91af">IUnityContainer </span>container, <strong><span style="color: #2b91af">CommandProxy </span>command</strong>)
{
    InitializeComponent();

    <span style="color: blue">this</span>.container = container;
    <strong>command.NavigateCommand.RegisterCommand(<span style="color: blue">new </span><span style="color: #2b91af">DelegateCommand</span>&lt;<span style="color: blue">string</span>&gt;(<span style="color: blue">this</span>.OnNavigate));</strong>

    <span style="color: blue">this</span>.MainFrame.Navigated += <span style="color: blue">new </span><span style="color: #2b91af">NavigatedEventHandler</span>(<span style="color: blue">this</span>.MainFrame_Navigated);
    <span style="color: blue">this</span>.DataContext = command;
}

<strong><span style="color: blue">private void </span>OnNavigate(<span style="color: blue">string </span>url)
{
    <span style="color: blue">this</span>.MainFrame.Navigate(<span style="color: blue">new </span><span style="color: #2b91af">Uri</span>(url, <span style="color: #2b91af">UriKind</span>.Relative));
}</strong></pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
<li>Add a handler to the <strong>Navigated</strong> event of the frame control to perform dependency injection in the pages. This requires all the pages to use property injection instead of constructor injection.
<pre><span style="color: blue">private readonly </span><span style="color: #2b91af">IUnityContainer </span>container;

<span style="color: blue">private void </span>MainFrame_Navigated(<span style="color: blue">object </span>sender, <span style="color: #2b91af">NavigationEventArgs </span>e)
{
    <strong><span style="color: blue">if </span>(e.Content != <span style="color: blue">null</span>)
    {
        <span style="color: blue">this</span>.container.BuildUp(e.Content.GetType(), e.Content);
    }
</strong>}</pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
</ol>
<p>You can download the final solution from the <a href="http://blogs.southworks.net/mconverti/wp-admin/#_Download">Download</a> section bellow.</p>
<h3><a name="_Limitations"></a>Limitations / Issues when modules are loaded dynamically</h3>
<p>When the modules are <strong>statically loaded</strong>, all the above steps work without problems. All the assemblies are declared in the <strong>AppManifest.xaml</strong> file of the Silverlight application and deployed / loaded before the application starts. Therefore, all the types and resources defined in the modules are available for navigation.</p>
<p>However, if the modules are <strong>dynamically loaded</strong> like in the <strong>Remote Modularity QuickStart</strong>, they are not included in the <strong>AppManifest.xaml</strong> file because their assemblies are deployed on demand by the CAL. This causes some problems when trying to crate an instance of a page class during the navigation. The exception you get says that the type specified in the <strong>x:Class </strong>attribute of the XAML could not be found in any loaded assembly. I’ve tried the following things to bypass this limitation without success:</p>
<ol>
<li>Modified the <strong>XapModuleTypeLoader</strong> class of the CAL to add all the <a href="http://msdn.microsoft.com/en-us/library/system.windows.assemblypart(VS.96).aspx" target="_blank">AssemblyPart</a>s of the modules to the <a href="http://msdn.microsoft.com/en-us/library/system.windows.deployment.parts(VS.96).aspx" target="_blank">Deployment.Current.Parts</a> collection. This caused no effect.</li>
<li>Tried to add the assembly name to the <a href="http://msdn.microsoft.com/en-us/library/cc189082(VS.96).aspx">x:Class</a> attribute of each page. However, I was no able to specify the assembly in the <strong>x:Class</strong> attribute using the syntax <strong>x:Class=&#8221;namespace.classname<em>;assembly=</em>assemblyname&#8221;</strong> like the <a href="http://msdn.microsoft.com/en-us/library/cc189082(VS.96).aspx">official Silverlight documentation</a> explains. I got a compilation error saying that the value of the x:Class attribute is not a valid fully qualified class name.</li>
</ol>
<p>Finally I opted for a workaround and found the following two possible ones:</p>
<ol>
<li><strong>Remove code behind classes in module’s pages</strong>: If your pages do not contain any <strong>x:Class</strong> attribute the navigation will work smoothly. You can take advantage of all the features available in Silverlight 3 (like Bindings, Commands, StaticResources, etc) to avoid having a code behind class.</li>
<li><strong>Use a Placeholder page in the shell module to host module pages</strong>: If your pages are complex and you cannot avoid having code behind classes, you can create a page in the Shell module to which all modules can navigate. This placeholder page will receive as a QueryString parameter the type of the view that should contain, resolve it in the application Container and add it to its <strong>Content</strong> property. This logic should be placed in the <strong>Loaded</strong> event of the page.
<pre><span style="color: green">// Loaded event of the placeholder page
</span><span style="color: blue">private void </span>ModulePlaceHolderPage_<strong>Loaded</strong>(<span style="color: blue">object </span>sender, <span style="color: #2b91af">RoutedEventArgs </span>e)
{
    <span style="color: blue">string </span>type = <span style="color: blue">this</span>.NavigationContext.QueryString[<span style="color: #a31515">"viewType"</span>];
    <span style="color: #2b91af">UIElement </span>moduleView = <span style="color: blue">null</span>;

    <span style="color: blue">if </span>((type != <span style="color: blue">null</span>) &amp;&amp; (<span style="color: #2b91af">Type</span>.GetType(type) != <span style="color: blue">null</span>))
    {
        <span style="color: #2b91af">Type </span>viewType = <span style="color: #2b91af">Type</span>.GetType(type, <span style="color: blue">false</span>);
        moduleView = <span style="color: blue">this</span>.Container.Resolve(viewType) <span style="color: blue">as </span><span style="color: #2b91af">UIElement</span>;
    }

    <span style="color: green">// Show in the content place holder the module view
    </span><span style="color: blue">this</span>.Content = (moduleView != <span style="color: blue">null</span>) ? moduleView :
                                          <span style="color: blue">new </span><span style="color: #2b91af">TextBlock</span>()
                                          {
                                              Foreground = <span style="color: blue">new </span><span style="color: #2b91af">SolidColorBrush</span>(<span style="color: #2b91af">Colors</span>.Red),
                                              TextWrapping = <span style="color: #2b91af">TextWrapping</span>.Wrap,
                                              Text = <span style="color: #2b91af">String</span>.Format(<span style="color: #2b91af">CultureInfo</span>.CurrentUICulture,
                                                                   <span style="color: #a31515">"View {0} was not found."</span>, type)
                                          };
    <span style="color: blue">this</span>.Title = <span style="color: blue">this</span>.NavigationContext.QueryString[<span style="color: #a31515">"title"</span>];
}</pre>
<p>Each module should also define its own Uri mappings to point the placeholder page adding the right QueryString parameters.</p>
<pre><span style="color: blue">private static </span><span style="color: #2b91af">Uri </span>CreateModuleUri()
{
    <strong><span style="color: blue">string </span>queryString = <span style="color: #2b91af">String</span>.Format(<span style="color: #a31515">"viewType={0}&amp;title={1}"</span>,
                                       <span style="color: blue">typeof</span>(<span style="color: #2b91af">DefaultViewY</span>).AssemblyQualifiedName,   </strong><strong><span style="color: green">// View type
                                       </span><span style="color: #a31515">"Module Y - RemoteModuleLoading Quickstart"</span>); </strong><span style="color: green"><strong>// Title
</strong>
    // I added the base Uri of the placeholder page inside the Shell project.
    </span><span style="color: blue">string </span>modulePlaceHolderUri = <span style="color: #2b91af">Application</span>.Current.Resources[<span style="color: #a31515">"placeHolderUri"</span>] <span style="color: blue">as string</span>;

    <span style="color: blue">return new </span><span style="color: #2b91af">Uri</span>(<span style="color: #2b91af">String</span>.Format(<span style="color: #a31515">"{0}?{1}"</span>, modulePlaceHolderUri, queryString), <span style="color: #2b91af">UriKind</span>.Relative);
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
</ol>
<h3><a name="_Download"></a>Download</h3>
<p>Download the C# source code from <a href="http://blogs.southworks.net/mconverti/files/2009/04/silverlight3navigationwithprism2.zip">here</a>. The file contains the following:</p>
<ul>
<li><strong>CAL folder</strong>: contains the source code of the Composite Application Library shipped with the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=fa07e1ce-ca3f-4b9b-a21b-e3fa10d013dd">Composite Application Guidance for WPF and Silverlight &#8211; February 2009</a>.</li>
<li><strong>LIB folder</strong>: contains assemblies required by the Composite Application Library.</li>
<li><strong>RemoteModularityQuickstart folder</strong>: contains the updated Remote Modularity Quickstart to use navigation functionality with the Silverlight 3 Navigation Framework using workarounds described previously.</li>
<li><strong>StaticModularityQuickstart folder</strong>: contains the updated Remote Modularity Quickstart to use navigation functionality with the Silverlight 3 Navigation Framework and modified to statically load modules.</li>
</ul>
<table border="1" cellspacing="0" cellpadding="1" width="550">
<tbody>
<tr>
<td width="550" valign="top"><strong>Note</strong>: This code is provided “AS IS” with no warranties, and confers no rights.</td>
</tr>
</tbody>
</table>
<p>Feedback is always appreciated!</p>
<p>Mariano</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblogs.southworks.net%2fmconverti%2f2009%2f04%2f12%2fhow-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblogs.southworks.net%2fmconverti%2f2009%2f04%2f12%2fhow-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/w-3EMOF20DM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2009/04/12/how-to-integrate-a-prism-v2-application-with-the-silverlight-3-navigation-framework/</feedburner:origLink></item>
		<item>
		<title>How To: Pass parameters to Commands Handlers in Composite UI Application Block (CAB) / SCSF</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/Ik763cN3Ou8/</link>
		<comments>http://blogs.southworks.net/mconverti/2009/02/04/how-to-pass-parameters-to-commands-handlers-in-composite-ui-application-block-cab-scsf/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 18:08:53 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[CAB]]></category>
		<category><![CDATA[SCSF]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=119</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2009/02/04/how-to-pass-parameters-to-commands-handlers-in-composite-ui-application-block-cab-scsf/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>This week there were some questions in the <a href="http://www.codeplex.com/smartclient/Thread/List.aspx">SCSF Codeplex Forum</a> asking for a way to pass custom parameters to a method marked as a Command Handler. As you may know, there is no out-of-the-box way to do it because they are raised internally by the Command class and, since you usually bind a command to a control event via the <strong>AddInvoker</strong> method, you cannot manage when the command is executed.</p>
<p>Additionally, the signature of a command handler is fixed and should always be like the following:</p>
<pre>[<span style="color: #2b91af">CommandHandler</span>(<span style="color: #2b91af">CommandNames</span>.MyCommand)]
<span style="color: blue">public void </span>OnMyCommandHandler(<span style="color: blue">object </span>sender, <span style="color: #2b91af">EventArgs </span>args)
{
    <span style="color: green">// The sender parameter is an instance of the Command class.
    </span><span style="color: #2b91af">Command </span>cmd = sender <span style="color: blue">as </span><span style="color: #2b91af">Command</span>;

    <span style="color: green">// The args parameter is empty.
    </span><span style="color: blue">bool </span>f = (args == <span style="color: #2b91af">EventArgs</span>.Empty);
} </pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>The instance of the Command class received in the <strong>sender</strong> parameter could be useful, for example, if you want to change the status of the command to <strong>Enabled</strong>, <strong>Disabled</strong> or <strong>Unavailable</strong>.</p>
<pre>cmd.Status = <span style="color: #2b91af">CommandStatus</span>.Disabled;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>But, <strong>what if you want to share the same command handler for different command invokers (like several menu items) and perform some operations based on which item was the invoker?</strong> You will somehow need to receive a parameter describing which was the item that raised the command.</p>
<h3>Workaround</h3>
<p>A possible workaround to <i>receive parameters</i> using a command could be by not adding your items as invokers of the command and instead execute the command programmatically. If you do this, you could use the <strong>State</strong> collection of the RootWorkItem to <em>pass parameters</em> to the command. </p>
<p>To implement this workaround follow these steps (the code use the ToolStripMenuItem control but could be used with other toolstrip controls): </p>
<ol>
<li>Add the parameter that you want to receive in the command handler to the <strong>Tag</strong> property of your menu item control: 
<pre><span style="color: #2b91af">ToolStripMenuItem </span>item = <span style="color: blue">new </span><span style="color: #2b91af">ToolStripMenuItem</span>() { Text = <span style="color: #a31515">"My Menu Item"</span>, <strong>Tag = <span style="color: #a31515">"My Tag"</span></strong>};</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<li>Add a handler for the <strong>Click </strong>event to your menu item:
<pre>item.Click += <span style="color: blue">new </span><span style="color: #2b91af">EventHandler</span>(Item_Click);</pre>
<li>In the <b>Item_Click</b> method, add the Tag of your item to the <b>State</b> collection of the <strong>RootWorkItem</strong> and execute the command programmatically:
<pre>WorkItem.RootWorkItem.State[<span style="color: #a31515">"LastTag"</span>] = item.Tag;
WorkItem.Commands[<span style="color: #2b91af">CommandNames</span>.CommandWithParameters].Execute();</pre>
<li>In the command handler, retrieve the Tag from the State collection:
<pre><span style="color: blue">string </span>tag = WorkItem.RootWorkItem.State[<span style="color: #a31515">"LastTag"</span>] <span style="color: blue">as string</span>;</pre>
<p><a href="http://11011.net/software/vspaste"></a></li>
</ol>
<p>The following code shows a ModuleController class that demonstrates how the approach above could be implemented:</p>
<pre><span style="color: blue">public class </span><span style="color: #2b91af">ModuleController </span>: <span style="color: #2b91af">WorkItemController
</span>{
    <span style="color: blue">public override void </span>Run()
    {
        AddServices();
        ExtendMenu();
        AddViews();
    }

    <span style="color: blue">private void </span>ExtendMenu()
    {
        AddTaggedMenuItem(<span style="color: #a31515">"Menu Item 1"</span>, <span style="color: #a31515">"Tag 1"</span>, <span style="color: #2b91af">UIExtensionSiteNames</span>.ModulesMenu);
        AddTaggedMenuItem(<span style="color: #a31515">"Menu Item 2"</span>, <span style="color: #a31515">"Tag 2"</span>, <span style="color: #2b91af">UIExtensionSiteNames</span>.ModulesMenu);
        AddTaggedMenuItem(<span style="color: #a31515">"Menu Item 3"</span>, <span style="color: #a31515">"Tag 3"</span>, <span style="color: #2b91af">UIExtensionSiteNames</span>.ModulesMenu);
        AddTaggedMenuItem(<span style="color: #a31515">"Menu Item 4"</span>, <span style="color: #a31515">"Tag 4"</span>, <span style="color: #2b91af">UIExtensionSiteNames</span>.ModulesMenu);
    }

    <span style="color: blue">private void </span>AddTaggedMenuItem(<span style="color: blue">string </span>menuText, <span style="color: blue">string </span>menuTag, <span style="color: blue">string </span>extensionSiteName)
    {
        <span style="color: #2b91af">ToolStripMenuItem </span>menuItem = <span style="color: blue">new </span><span style="color: #2b91af">ToolStripMenuItem</span>() { Text = menuText, ToolTipText = menuText, Tag = menuTag };

        menuItem.Click += <span style="color: blue">new </span><span style="color: #2b91af">EventHandler</span>(MenuItem_Click);

        WorkItem.UIExtensionSites[extensionSiteName].Add(menuItem);
    }

    <span style="color: blue">private void </span>MenuItem_Click(<span style="color: blue">object </span>sender, <span style="color: #2b91af">EventArgs </span>e)
    {
        <span style="color: #2b91af">ToolStripMenuItem </span>item = sender <span style="color: blue">as </span><span style="color: #2b91af">ToolStripMenuItem</span>;

        <span style="color: blue">if </span>(item != <span style="color: blue">null</span>)
        {
            WorkItem.RootWorkItem.State[<span style="color: #a31515">"LastTag"</span>] = item.Tag;
            WorkItem.Commands[<span style="color: #2b91af">CommandNames</span>.CommandWithParameters].Execute();
        }
    }

    [<span style="color: #2b91af">CommandHandler</span>(<span style="color: #2b91af">CommandNames</span>.CommandWithParameters)]
    <span style="color: blue">public void </span>OnCommandWithParameters(<span style="color: blue">object </span>sender, <span style="color: #2b91af">EventArgs </span>args)
    {
        <span style="color: blue">string </span>tag = WorkItem.RootWorkItem.State[<span style="color: #a31515">"LastTag"</span>] <span style="color: blue">as string</span>;

        <span style="color: blue">if </span>(tag != <span style="color: blue">null</span>)
        {
            <span style="color: #2b91af">MessageBox</span>.Show(<span style="color: #a31515">"The tag received in the command handler is: " </span>+ tag, <span style="color: #a31515">"Tags"</span>);
        }
    }

    <span style="color: green">// ...
</span>}</pre>
<p>In this way, the <strong>State</strong> collection is used as a container for your custom command parameters.</p>
<p>&nbsp;</p>
<p>Enjoy.</p>
</p>
<div class="wlWriterSmartContent" id="8e6b10e2-b441-4deb-bf91-97dc72185b1c" style="padding-right: 0px;padding-left: 0px;padding-bottom: 0px;margin: 0px;padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/CAB" rel="tag">CAB</a>,<a href="http://technorati.com/tags/SCSF" rel="tag">SCSF</a>,<a href="http://technorati.com/tags/composite%20UI%20Application%20Block" rel="tag">composite UI Application Block</a>,<a href="http://technorati.com/tags/smart%20Client%20Software%20Factory" rel="tag">smart Client Software Factory</a></div>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/Ik763cN3Ou8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2009/02/04/how-to-pass-parameters-to-commands-handlers-in-composite-ui-application-block-cab-scsf/</feedburner:origLink></item>
		<item>
		<title>Migrating Prism v2 Silverlight applications from static to dynamic module loading</title>
		<link>http://feeds.southworks.net/~r/mconverti/~3/L9F2uDnAo0I/</link>
		<comments>http://blogs.southworks.net/mconverti/2009/02/02/migrating-prism-v2-silverlight-applications-from-static-to-dynamic-module-loading/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 16:37:29 +0000</pubDate>
		<dc:creator>mconverti</dc:creator>
				<category><![CDATA[Prism v2]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://blogs.southworks.net/mconverti/?p=118</guid>
		<description><![CDATA[... <a href="http://blogs.southworks.net/mconverti/2009/02/02/migrating-prism-v2-silverlight-applications-from-static-to-dynamic-module-loading/" class="more-link">read more<img src="http://blogs.southworks.net/mconverti/wp-content/themes/southworks/assets/img/arrow-blue.png" width="12" height="12" alt="" /></a>]]></description>
			<content:encoded><![CDATA[<p>The P&amp;P Sustained Engineering Team has published an <a href="http://www.codeplex.com/CompositeWPF/Wiki/View.aspx?title=Migrating%20Prism%20v2%20RI%20from%20static%20to%20dynamic%20module%20loading">article</a> in the <a href="http://www.codeplex.com/CompositeWPF/Wiki/View.aspx?title=Knowledge%20Base">Composite WPF &amp; Silverlight Knowledge Base</a> that explains how to modify the <strong>Prism v2 Silverlight Reference Implementation</strong> so it uses <strong>Dynamic Module Loading</strong>. By doing this, each module generates its own <strong>XAP </strong>file and the <strong>ModulesCatalog.xaml</strong> file in the Shell project defines how modules should be loaded:</p>
<ul>
<li><a href="http://www.codeplex.com/CompositeWPF/Wiki/View.aspx?title=Migrating%20Prism%20v2%20RI%20from%20static%20to%20dynamic%20module%20loading">Migrating Prism v2 RI from static to dynamic module loading</a></li>
</ul>
<p>As I mentioned, the article targets the migration of the <strong>Silverlight Reference Implementation</strong> included in the <a href="http://www.codeplex.com/CompositeWPF/Release/ProjectReleases.aspx?ReleaseId=22566">Prism V2 &#8211; Drop 10</a>, but you could use it as a guidance to migrate any Prism v2 Silverlight application from static to dynamic (remote) module loading. The main steps are:</p>
<ol>
<li>Update <strong>Silverlight class library</strong> projects to <strong>Silverlight application</strong> projects to generate <strong>XAP</strong> files</li>
<li>Set up remote module loading by adding a <strong>ModulesCatalog.xaml</strong> file and modify the <strong>Bootstrapper</strong> class</li>
<li>Create a <strong>Web Application Project</strong> to host the application</li>
</ol>
<p>The team also published the following:</p>
<ul>
<li>The <a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CompositeWPF&amp;DownloadId=56997">PDF</a> version of the article</li>
<li>The updated <a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CompositeWPF&amp;DownloadId=56998">source code</a> of the Silverligh RI</li>
</ul>
<table border="1" cellspacing="0" cellpadding="1" width="545">
<tbody>
<tr>
<td width="540" valign="top"><strong>Disclaimer:</strong> The code is provided &#8220;AS IS&#8221; with no warranties, and confers no rights.</td>
</tr>
</tbody>
</table>
<img src="http://feeds.feedburner.com/~r/mconverti/~4/L9F2uDnAo0I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss />
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blogs.southworks.net/mconverti/2009/02/02/migrating-prism-v2-silverlight-applications-from-static-to-dynamic-module-loading/</feedburner:origLink></item>
	</channel>
</rss>

