<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>From the Desk of Brandon Haynes &#187; Web Client Software Factory (WCSF)</title>
	<atom:link href="http://blogs.law.harvard.edu/brandonhaynes/category/technology/web-client-software-factory-wcsf/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.law.harvard.edu/brandonhaynes</link>
	<description>Observations about the intersection of technology, business, and intellectual property</description>
	<lastBuildDate>Wed, 21 Oct 2009 16:14:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/us/</creativeCommons:license>
		<item>
		<title>Configuring custom INavigationService in WCSF Contrib library (Updated)</title>
		<link>http://blogs.law.harvard.edu/brandonhaynes/2008/07/22/configuring-custom-inavigationservice-in-wcsf-contrib-library-updated/</link>
		<comments>http://blogs.law.harvard.edu/brandonhaynes/2008/07/22/configuring-custom-inavigationservice-in-wcsf-contrib-library-updated/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 14:14:00 +0000</pubDate>
		<dc:creator>Brandon Haynes</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Client Software Factory (WCSF)]]></category>
		<category><![CDATA[INavigationService]]></category>
		<category><![CDATA[WCSF]]></category>

		<guid isPermaLink="false">http://everysport.net/GamePlan3/Default.aspx?tabid=489&amp;EntryID=11</guid>
		<description><![CDATA[I recently wrote about implementing a custom PageFlow navigation provider in the WCSF library.  Since then, the patterns team has broken out the PageFlow block into a separate package (formally the &#8220;Patterns &#38; Practices: Web Client Software Factory Contrib&#8220;).
Since my existing PageFlow navigation provider-related modifications became obsolete with this change, I thought I&#8217;d spend a [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://blogs.law.harvard.edu/brandonhaynes/2008/02/17/configuring-custom-inavigationservice-in-wcsf-library/"><span style="color: #669966">recently wrote</span></a> about implementing a custom PageFlow navigation provider in the WCSF library.  Since then, the patterns team has broken out the PageFlow block into a separate package (formally the &#8220;<a href="http://www.codeplex.com/wcsfcontrib"><span style="color: #669966">Patterns &amp; Practices: Web Client Software Factory Contrib</span></a>&#8220;).</p>
<p>Since my existing PageFlow navigation provider-related modifications became obsolete with this change, I thought I&#8217;d spend a few minutes porting my changes to the new block.  I actually completed this task a couple of months ago, but have just now found the time to post it publicly.  Thanks to those who persevered in prodding me to put it online!</p>
<p><span id="more-7"></span></p>
<h3>WCSF Changes</h3>
<p>The web.config setting is identical to the original setting, marked up as:</p>
<pre><span class="kwrd">&lt;</span><span class="html">pageFlowProvider</span> <span class="attr">providerType</span><span class="kwrd">="WCSFContrib.PageFlow.Xml.XmlPageFlowProvider, WCSFContrib.PageFlow.Xml"</span> <span class="attr">navigationType</span><span class="kwrd">="<strong>[Fully Qualified Assembly Name]</strong>"</span> <span class="kwrd">/&gt;</span></pre>
<pre>This change is picked up through an addition to Configuration/PageFlowProviderSection.cs, as:</pre>
<pre>        <span class="rem">/// &lt;summary&gt;</span>
        <span class="rem">/// Defines the concrete type of the INavigator.</span>
        <span class="rem">/// &lt;/summary&gt;</span>
        [ConfigurationProperty(<span class="str">"navigationType"</span>, DefaultValue = <span class="str">"WCSFContrib.PageFlow.Services.NavigationService"</span>, IsRequired = <span class="kwrd">false</span>)]
        <span class="kwrd">public</span> <span class="kwrd">string</span> NavigationType
            {
            get { <span class="kwrd">return</span> (<span class="kwrd">string</span>)<span class="kwrd">base</span>[<span class="str">"navigationType"</span>]; }
            }</pre>
<p> </p>
<p>Next, the BuildProvider method of PageFlowDirectory (PageFlowDirectory.cs) must be augmented to pick up the specified provider and load it (changes in bold):</p>
<pre>        <span class="kwrd">private</span> <span class="kwrd">static</span> IPageFlowProvider BuildProvider()
        {
            PageFlowProviderSection configSection =
                (PageFlowProviderSection) ConfigurationManager.GetSection(<span class="str">"pageFlow/pageFlowProvider"</span>);
            PageFlowInstanceStoreProviderSection storeSection =
                (PageFlowInstanceStoreProviderSection) ConfigurationManager.GetSection(<span class="str">"pageFlow/pageFlowInstanceStoreProvider"</span>);
            PageFlowInstanceCorrelationTokenProviderSection tokenProviderSection =
                (PageFlowInstanceCorrelationTokenProviderSection)ConfigurationManager.GetSection(<span class="str">"pageFlow/pageFlowInstanceCorrelationTokenProvider"</span>);
            Type providerType = Type.GetType(configSection.ProviderType);
<strong>            Type navigationType = Type.GetType(configSection.NavigationType);
</strong>
<strong>            <span class="kwrd">if</span> (navigationType == <span class="kwrd">null</span>)
                <span class="kwrd">throw</span> <span class="kwrd">new</span> InvalidOperationException(<span class="str">"Invalid navigationType specified: "</span> + configSection.NavigationType);

            Services.INavigationService navigationService = (Services.INavigationService)Activator.CreateInstance(navigationType);
</strong>            _provider = (IPageFlowProvider)Activator.CreateInstance(providerType,
                                                                    BindingFlags.CreateInstance,
                                                                    <span class="kwrd">null</span>,
<strong>                                                                    <span class="kwrd">new</span> <span class="kwrd">object</span>[] { navigationService, storeSection, tokenProviderSection },
</strong>                                                                    CultureInfo.CurrentCulture);
            <span class="kwrd">return</span> _provider;
        }</pre>
<p>Finally, each concrete provider must be modified to accept the appropriate navigationService as a constructor parameter. In the case of the XmlPageFlowProvider, this would result in the following changes (highlighted in bold):</p>
<pre>        <span class="kwrd">public</span> XmlPageFlowProvider(INavigationService navigationService, ...)
        {
            <span class="kwrd">if</span> (pageFlowInstanceStoreProviderSection == <span class="kwrd">null</span>)
                <span class="kwrd">throw</span> <span class="kwrd">new</span> ArgumentNullException(<span class="str">"pageFlowInstanceStoreProviderSection"</span>);

            <span class="kwrd">if</span> (pageFlowCorrelationTokenProviderSection == <span class="kwrd">null</span>)
                <span class="kwrd">throw</span> <span class="kwrd">new</span> ArgumentNullException(<span class="str">"pageFlowCorrelationTokenProviderSection"</span>);

            IDictionary&lt;<span class="kwrd">string</span>, NavigationGraph&gt; navigationGraphs = <span class="kwrd">new</span> WebConfigStore().GetXmlPageFlowNavigationGraphs();

<strong>            _pageFlowFactory = <span class="kwrd">new</span> XmlPageFlowFactory(navigationGraphs, navigationService);
  </strong>          <span class="rem">//_pageFlowFactory = new XmlPageFlowFactory(navigationGraphs, new NavigationService());</span>

            Type tokenProviderType = Type.GetType(pageFlowCorrelationTokenProviderSection.ProviderType, <span class="kwrd">true</span>, <span class="kwrd">true</span>);
            IPageFlowCorrelationTokenProvider _tokenProvider =
                (IPageFlowCorrelationTokenProvider)Activator.CreateInstance(tokenProviderType);

            Type storeType = Type.GetType(pageFlowInstanceStoreProviderSection.ProviderType, <span class="kwrd">true</span>, <span class="kwrd">true</span>);
            _store =
                (IPageFlowInstanceStore)Activator.CreateInstance(storeType, BindingFlags.CreateInstance, <span class="kwrd">null</span>,
                                                                  <span class="kwrd">new</span> <span class="kwrd">object</span>[]
                                                                      {
                                                                          pageFlowInstanceStoreProviderSection.ConnectionStringName,
                                                                        _tokenProvider
                                                                      },
                                                                  CultureInfo.CurrentCulture);
            PopulateDirectory(navigationGraphs);
         }</pre>
<p>As a footnote, I did consider modifying the NavigationService directly to instantiate and decorate an underlying custom NavigationProvider. While this might have resulted in one less code change, I do not feel that it is of optimal design. Concrete PageFlow providers should not be responsible for instantiation of their navigationProviders; these objects should be injected, for maximum flexibility. </p>
<h3>Downloads</h3>
<ul>
<li><a href="http://brandonhaynes.org/Downloads/WCSFContrib.PageFlow.zip">WCSFContrib.PageFlow.DLL and WCSFContrib.PageFlow.Xml.DLL </a></li>
<li><a href="http://brandonhaynes.org/Downloads/PageFlowSourceModifications.zip">WCSFContrib.PageFlow and WCSFContrib.PageFlow.Xml Source</a> (Modified files only!)</li>
</ul>
<p>For the complete (pre-modification) package, visit the project homepage at <a title="http://www.codeplex.com/wcsfcontrib" href="http://www.codeplex.com/wcsfcontrib"><span style="color: #669966">http://www.codeplex.com/wcsfcontrib</span></a>.  For those keeping score, I&#8217;ve created a work item for this change here.</p>
<h3>Coming Soon: Using the PageFlow Application Block within DotNetNuke</h3>
<p>The WCSF PageFlow package continues to be an excellent application block.  It is a shame that it continues to be so ASPX-centric.  The modifications herein are a first step toward removing this limitation and allowing it to be used in more flexible circumstances, such as an ASCX-based state machine or within the DNN framework.</p>
<p>For anyone who is interested, I am now using this application block successfully (soon to be in production) within the DotNetNuke framework, using:</p>
<ul>
<li>The block-level modifications outlined above</li>
<li>A custom navigation service (currently SelfRedirectingNavigationService, though, as I will blog about sometime soon, I have some enhancements in store in this area)</li>
<li>A web.config-defined XmlPageFlow provider state machine</li>
<li>A module shell with some custom wire-up code</li>
<li>One ASCX control for each state in the XmlPageFlow state machine</li>
</ul>
<p>I will continue to blog about this topic, most likely addressing a concrete navigation service that may be used with DNN next.  Stay tuned!</p>
<p>B</p>



Share on:


	<a rel="nofollow" id="digg" href="javascript:window.location='http%3A%2F%2Fdigg.com%2Fsubmit%3Fphase%3D2%26amp%3Burl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529%26amp%3Bbodytext%3DI%2520recently%2520wrote%2520about%2520implementing%2520a%2520custom%2520PageFlow%2520navigation%2520provider%2520in%2520the%2520WCSF%2520library.%25C2%25A0%2520Since%2520then%252C%2520the%2520patterns%2520team%2520has%2520broken%2520out%2520the%2520PageFlow%2520block%2520into%2520a%2520separate%2520package%2520%2528formally%2520the%2520%2522Patterns%2520%2526amp%253B%2520Practices%253A%2520Web%2520Client%2520Software%2520Fact';" title="Digg"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" id="del.icio.us" href="javascript:window.location='http%3A%2F%2Fdelicious.com%2Fpost%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529%26amp%3Bnotes%3DI%2520recently%2520wrote%2520about%2520implementing%2520a%2520custom%2520PageFlow%2520navigation%2520provider%2520in%2520the%2520WCSF%2520library.%25C2%25A0%2520Since%2520then%252C%2520the%2520patterns%2520team%2520has%2520broken%2520out%2520the%2520PageFlow%2520block%2520into%2520a%2520separate%2520package%2520%2528formally%2520the%2520%2522Patterns%2520%2526amp%253B%2520Practices%253A%2520Web%2520Client%2520Software%2520Fact';" title="del.icio.us"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" id="facebook" href="javascript:window.location='http%3A%2F%2Fwww.facebook.com%2Fshare.php%3Fu%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Bt%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529';" title="Facebook"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" id="google" href="javascript:window.location='http%3A%2F%2Fwww.google.com%2Fbookmarks%2Fmark%3Fop%3Dedit%26amp%3Bbkmk%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529%26amp%3Bannotation%3DI%2520recently%2520wrote%2520about%2520implementing%2520a%2520custom%2520PageFlow%2520navigation%2520provider%2520in%2520the%2520WCSF%2520library.%25C2%25A0%2520Since%2520then%252C%2520the%2520patterns%2520team%2520has%2520broken%2520out%2520the%2520PageFlow%2520block%2520into%2520a%2520separate%2520package%2520%2528formally%2520the%2520%2522Patterns%2520%2526amp%253B%2520Practices%253A%2520Web%2520Client%2520Software%2520Fact';" title="Google Bookmarks"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" id="dotnetkicks" href="javascript:window.location='http%3A%2F%2Fwww.dotnetkicks.com%2Fkick%2F%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529';" title="DotNetKicks"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" id="stumbleupon" href="javascript:window.location='http%3A%2F%2Fwww.stumbleupon.com%2Fsubmit%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520Contrib%2520library%2520%2528Updated%2529';" title="StumbleUpon"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" id="technorati" href="javascript:window.location='http%3A%2F%2Ftechnorati.com%2Ffaves%3Fadd%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F07%252F22%252Fconfiguring-custom-inavigationservice-in-wcsf-contrib-library-updated%252F';" title="Technorati"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/brandonhaynes/2008/07/22/configuring-custom-inavigationservice-in-wcsf-contrib-library-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/us/</creativeCommons:license>
	</item>
		<item>
		<title>Configuring custom INavigationService in WCSF library</title>
		<link>http://blogs.law.harvard.edu/brandonhaynes/2008/02/17/configuring-custom-inavigationservice-in-wcsf-library/</link>
		<comments>http://blogs.law.harvard.edu/brandonhaynes/2008/02/17/configuring-custom-inavigationservice-in-wcsf-library/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 18:17:00 +0000</pubDate>
		<dc:creator>Brandon Haynes</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Client Software Factory (WCSF)]]></category>
		<category><![CDATA[INavigationService]]></category>
		<category><![CDATA[WCSF]]></category>

		<guid isPermaLink="false">http://everysport.net/GamePlan3/Default.aspx?tabid=489&amp;EntryID=2</guid>
		<description><![CDATA[I was dismayed to discover that one could not configure a custom INavigationService at the web.config level.  As part of my experiments to integrate PageFlow into a DotNetNuke module, I needed such customization, and wanted to continue to configure the providers in the web.config.
So, instead of kludging and compiling my own custom PageFlow libraries, I decided [...]]]></description>
			<content:encoded><![CDATA[<p>I was <a href="http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=13863">dismayed to discover</a> that one could not configure a custom INavigationService at the web.config level.  As part of my experiments to integrate PageFlow into a DotNetNuke module, I needed such customization, and wanted to continue to configure the providers in the web.config.</p>
<p>So, instead of kludging and compiling my own custom PageFlow libraries, I decided to modify the framework itself and allow customization of the INavigationService at the web.config level.  Required only a small number of code changes, and ultimately the navigation service interface is configured as:</p>
<p>I created a work item in the WSCF project which discusses my changes in a little more detail.  It essentially boiled down to adding a new string attribute (NavigationType) to the provider section class (defaulting to the existing Microsoft.Practices.PageFlow.Services.NavigationService), modifying the BuildProvider method to use this configuration value, and adding the extra parameter to the provider constructor.</p>
<p>Work item is located <a href="http://www.codeplex.com/websf/WorkItem/View.aspx?WorkItemId=15208">here</a>.<br />
Patch is located <a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=websf&amp;DownloadId=27695">here.</a></p>
<p>Hope this helps anyone who needs a custom navigation service for the PageFlow block in the WCSF.  I&#8217;ll be continuing to blog about my attempts to integrate this block into a DNN module and  have it play nicely with the DNN framework.</p>
<p>B</p>



Share on:


	<a rel="nofollow" id="digg" href="javascript:window.location='http%3A%2F%2Fdigg.com%2Fsubmit%3Fphase%3D2%26amp%3Burl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library%26amp%3Bbodytext%3DI%2520was%2520dismayed%2520to%2520discover%25C2%25A0that%2520one%2520could%2520not%2520configure%2520a%2520custom%2520INavigationService%2520at%2520the%2520web.config%2520level.%25C2%25A0%2520As%2520part%2520of%2520my%2520experiments%2520to%2520integrate%2520PageFlow%2520into%2520a%2520DotNetNuke%2520module%252C%2520I%2520needed%2520such%2520customization%252C%2520and%2520wanted%2520to%2520continue%2520to%2520configure';" title="Digg"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" id="del.icio.us" href="javascript:window.location='http%3A%2F%2Fdelicious.com%2Fpost%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library%26amp%3Bnotes%3DI%2520was%2520dismayed%2520to%2520discover%25C2%25A0that%2520one%2520could%2520not%2520configure%2520a%2520custom%2520INavigationService%2520at%2520the%2520web.config%2520level.%25C2%25A0%2520As%2520part%2520of%2520my%2520experiments%2520to%2520integrate%2520PageFlow%2520into%2520a%2520DotNetNuke%2520module%252C%2520I%2520needed%2520such%2520customization%252C%2520and%2520wanted%2520to%2520continue%2520to%2520configure';" title="del.icio.us"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" id="facebook" href="javascript:window.location='http%3A%2F%2Fwww.facebook.com%2Fshare.php%3Fu%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Bt%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library';" title="Facebook"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" id="google" href="javascript:window.location='http%3A%2F%2Fwww.google.com%2Fbookmarks%2Fmark%3Fop%3Dedit%26amp%3Bbkmk%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library%26amp%3Bannotation%3DI%2520was%2520dismayed%2520to%2520discover%25C2%25A0that%2520one%2520could%2520not%2520configure%2520a%2520custom%2520INavigationService%2520at%2520the%2520web.config%2520level.%25C2%25A0%2520As%2520part%2520of%2520my%2520experiments%2520to%2520integrate%2520PageFlow%2520into%2520a%2520DotNetNuke%2520module%252C%2520I%2520needed%2520such%2520customization%252C%2520and%2520wanted%2520to%2520continue%2520to%2520configure';" title="Google Bookmarks"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" id="dotnetkicks" href="javascript:window.location='http%3A%2F%2Fwww.dotnetkicks.com%2Fkick%2F%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library';" title="DotNetKicks"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>
	<a rel="nofollow" id="linkedin" href="javascript:window.location='http%3A%2F%2Fwww.linkedin.com%2FshareArticle%3Fmini%3Dtrue%26amp%3Burl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library%26amp%3Bsource%3DFrom%2Bthe%2BDesk%2Bof%2BBrandon%2BHaynes%2BObservations%2Babout%2Bthe%2Bintersection%2Bof%2Btechnology%252C%2Bbusiness%252C%2Band%2Bintellectual%2Bproperty%26amp%3Bsummary%3DI%2520was%2520dismayed%2520to%2520discover%25C2%25A0that%2520one%2520could%2520not%2520configure%2520a%2520custom%2520INavigationService%2520at%2520the%2520web.config%2520level.%25C2%25A0%2520As%2520part%2520of%2520my%2520experiments%2520to%2520integrate%2520PageFlow%2520into%2520a%2520DotNetNuke%2520module%252C%2520I%2520needed%2520such%2520customization%252C%2520and%2520wanted%2520to%2520continue%2520to%2520configure';" title="LinkedIn"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow" id="stumbleupon" href="javascript:window.location='http%3A%2F%2Fwww.stumbleupon.com%2Fsubmit%3Furl%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F%26amp%3Btitle%3DConfiguring%2520custom%2520INavigationService%2520in%2520WCSF%2520library';" title="StumbleUpon"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow" id="technorati" href="javascript:window.location='http%3A%2F%2Ftechnorati.com%2Ffaves%3Fadd%3Dhttp%253A%252F%252Fblogs.law.harvard.edu%252Fbrandonhaynes%252F2008%252F02%252F17%252Fconfiguring-custom-inavigationservice-in-wcsf-library%252F';" title="Technorati"><img src="http://blogs.law.harvard.edu/brandonhaynes/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blogs.law.harvard.edu/brandonhaynes/2008/02/17/configuring-custom-inavigationservice-in-wcsf-library/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/us/</creativeCommons:license>
	</item>
	</channel>
</rss>
