<?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/"
	>

<channel>
	<title>Josh Close&#039;s Blog</title>
	<atom:link href="http://www.joshclose.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joshclose.net</link>
	<description>This is a brain dump for things I want to remember...</description>
	<lastBuildDate>Fri, 02 Dec 2011 02:46:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Navigating to the Current Page on WP7</title>
		<link>http://www.joshclose.net/2011/12/navigating-to-the-current-page-on-wp7/</link>
		<comments>http://www.joshclose.net/2011/12/navigating-to-the-current-page-on-wp7/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 02:46:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=122</guid>
		<description><![CDATA[Sometimes you want to be able to &#8220;reset&#8221; the page you&#8217;re on. For example, the page is a form with a bunch of data that gets filled out. When the user clicks save, you prompt them and ask if they want to add another. If so, then you need to reset the page back to [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you want to be able to &#8220;reset&#8221; the page you&#8217;re on. For example, the page is a form with a bunch of data that gets filled out. When the user clicks save, you prompt them and ask if they want to add another. If so, then you need to reset the page back to it&#8217;s original state. This sounds easy enough to do straight from code, but resetting everything isn&#8217;t always as easy as it sounds.</p>
<p>I&#8217;ve found that navigating to the current page works the best. Then the page runs as new, and everything gets setup properly without any extra code.</p>
<p>By default, you can&#8217;t navigate to the same page; it just doesn&#8217;t do anything. The trick here is to make the URI unique.</p>
<div id="gist-1421470" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="n">var</span> <span class="n">uri</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Uri</span><span class="p">(</span> <span class="kt">string</span><span class="p">.</span><span class="n">Format</span><span class="p">(</span> <span class="s">&quot;{0}?unique={1}&quot;</span><span class="p">,</span> <span class="s">&quot;SamePage.xaml, Guid.NewGuid() ), UriKind.RelativeOrAbsolute );</span></div><div class='line' id='LC2'><span class="n">RemoveBackEntry</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span></div><div class='line' id='LC3'><span class="n">NavigationService</span><span class="p">.</span><span class="n">Navigate</span><span class="p">(</span> <span class="n">uri</span> <span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1421470/bbec0a505471cfb189f2c982a19bce0e587bff89/Example1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1421470#file_example1.cs" style="float:right;margin-right:10px;color:#666">Example1.cs</a>
            <a href="https://gist.github.com/1421470">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>You may also have noticed the line &#8216;RemoveBackEntry = true;&#8217;. When navigating back to yourself, you don&#8217;t want the page to keep getting added to the back stack. You can see how to remove the back entry in my previous post <a href="http://www.joshclose.net/2011/11/navigation-with-mvvm-on-wp7/" target="_blank">Navigating with MVVM on WP7</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2011/12/navigating-to-the-current-page-on-wp7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Navigation with MVVM on WP7</title>
		<link>http://www.joshclose.net/2011/11/navigation-with-mvvm-on-wp7/</link>
		<comments>http://www.joshclose.net/2011/11/navigation-with-mvvm-on-wp7/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 07:03:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=10</guid>
		<description><![CDATA[One thing that isn’t very straight forward when using MVVM on WP7 is how to navigate around. Many articles I’ve seen have said to use a messaging (pub/sub) system like the EventAggregator in Prism. I personally found this to not work the greatest. Plus, you want to be able to use the NavigationContext to grab [...]]]></description>
			<content:encoded><![CDATA[<p>One thing that isn’t very straight forward when using MVVM on WP7 is how to navigate around. Many articles I’ve seen have said to use a messaging (pub/sub) system like the EventAggregator in Prism. I personally found this to not work the greatest. Plus, you want to be able to use the NavigationContext to grab things from the URL. The approach I came up with is pretty simple in my opinion and works just like it does if you’re using code-behind.</p>
<p>The view model base class will be setup just like a code-behind file so we can access the NavigationService, NavigationContext, and the navigation events.</p>
<div id="gist-1365757" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Windows.Navigation</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Microsoft.Practices.Prism.ViewModel</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">RememberIt.WP7.App.ViewModels</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>	<span class="k">public</span> <span class="k">abstract</span> <span class="k">class</span> <span class="nc">ViewModelBase</span> <span class="p">:</span> <span class="n">NotificationObject</span></div><div class='line' id='LC7'>	<span class="p">{</span></div><div class='line' id='LC8'>		<span class="k">protected</span> <span class="kt">bool</span> <span class="n">RemoveBackEntry</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'>		<span class="k">public</span> <span class="n">NavigationService</span> <span class="n">NavigationService</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>		<span class="k">public</span> <span class="n">NavigationContext</span> <span class="n">NavigationContext</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>		<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">OnNavigatedTo</span><span class="p">(</span> <span class="n">NavigationEventArgs</span> <span class="n">e</span> <span class="p">)</span> <span class="p">{}</span></div><div class='line' id='LC15'><br/></div><div class='line' id='LC16'>		<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">OnNavigatingFrom</span><span class="p">(</span> <span class="n">NavigatingCancelEventArgs</span> <span class="n">e</span> <span class="p">)</span> <span class="p">{}</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>		<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">OnNavigatedFrom</span><span class="p">(</span> <span class="n">NavigationEventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC19'>		<span class="p">{</span></div><div class='line' id='LC20'>			<span class="k">if</span><span class="p">(</span> <span class="n">RemoveBackEntry</span> <span class="p">)</span></div><div class='line' id='LC21'>			<span class="p">{</span></div><div class='line' id='LC22'>				<span class="n">RemoveBackEntry</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC23'>				<span class="n">NavigationService</span><span class="p">.</span><span class="n">RemoveBackEntry</span><span class="p">();</span></div><div class='line' id='LC24'>			<span class="p">}</span></div><div class='line' id='LC25'>		<span class="p">}</span></div><div class='line' id='LC26'>	<span class="p">}</span></div><div class='line' id='LC27'><span class="p">}</span></div><div class='line' id='LC28'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1365757/5b1c6860f0c2b51a8e19d51059c1771b1f990807/Example2.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1365757#file_example2.cs" style="float:right;margin-right:10px;color:#666">Example2.cs</a>
            <a href="https://gist.github.com/1365757">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>For this to work, you’ll need a PageBase class every view will inherit from. I’m sure there is a slick way to hook into every page without doing this, but I haven’t taken the time to figure it out yet.</p>
<div id="gist-1365757" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">Microsoft.Phone.Controls</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">RememberIt.WP7.App.ViewModels</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">RememberIt.WP7.App.Views</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>	<span class="k">public</span> <span class="k">class</span> <span class="nc">PageBase</span> <span class="p">:</span> <span class="n">PhoneApplicationPage</span></div><div class='line' id='LC7'>	<span class="p">{</span></div><div class='line' id='LC8'>		<span class="k">protected</span> <span class="nf">PageBase</span><span class="p">()</span></div><div class='line' id='LC9'>		<span class="p">{</span></div><div class='line' id='LC10'>			<span class="n">Loaded</span> <span class="p">+=</span> <span class="n">PageBaseLoaded</span><span class="p">;</span></div><div class='line' id='LC11'>		<span class="p">}</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>		<span class="k">private</span> <span class="k">void</span> <span class="nf">PageBaseLoaded</span><span class="p">(</span> <span class="kt">object</span> <span class="n">sender</span><span class="p">,</span> <span class="n">System</span><span class="p">.</span><span class="n">Windows</span><span class="p">.</span><span class="n">RoutedEventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC14'>		<span class="p">{</span></div><div class='line' id='LC15'>			<span class="n">var</span> <span class="n">viewModel</span> <span class="p">=</span> <span class="n">DataContext</span> <span class="k">as</span> <span class="n">ViewModelBase</span><span class="p">;</span></div><div class='line' id='LC16'>			<span class="k">if</span><span class="p">(</span> <span class="n">viewModel</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC17'>			<span class="p">{</span></div><div class='line' id='LC18'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">NavigationService</span> <span class="p">=</span> <span class="n">NavigationService</span><span class="p">;</span></div><div class='line' id='LC19'>			<span class="p">}</span></div><div class='line' id='LC20'>		<span class="p">}</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>		<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">OnNavigatedTo</span><span class="p">(</span> <span class="n">System</span><span class="p">.</span><span class="n">Windows</span><span class="p">.</span><span class="n">Navigation</span><span class="p">.</span><span class="n">NavigationEventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC23'>		<span class="p">{</span></div><div class='line' id='LC24'>			<span class="k">base</span><span class="p">.</span><span class="n">OnNavigatedTo</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span>			</div><div class='line' id='LC25'>			<span class="n">var</span> <span class="n">viewModel</span> <span class="p">=</span> <span class="n">DataContext</span> <span class="k">as</span> <span class="n">ViewModelBase</span><span class="p">;</span></div><div class='line' id='LC26'>			<span class="k">if</span><span class="p">(</span> <span class="n">viewModel</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC27'>			<span class="p">{</span></div><div class='line' id='LC28'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">NavigationContext</span> <span class="p">=</span> <span class="n">NavigationContext</span><span class="p">;</span></div><div class='line' id='LC29'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">OnNavigatedTo</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span></div><div class='line' id='LC30'>			<span class="p">}</span></div><div class='line' id='LC31'>		<span class="p">}</span></div><div class='line' id='LC32'><br/></div><div class='line' id='LC33'>		<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">OnNavigatingFrom</span><span class="p">(</span> <span class="n">System</span><span class="p">.</span><span class="n">Windows</span><span class="p">.</span><span class="n">Navigation</span><span class="p">.</span><span class="n">NavigatingCancelEventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC34'>		<span class="p">{</span></div><div class='line' id='LC35'>			<span class="k">base</span><span class="p">.</span><span class="n">OnNavigatingFrom</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span></div><div class='line' id='LC36'>			<span class="n">var</span> <span class="n">viewModel</span> <span class="p">=</span> <span class="n">DataContext</span> <span class="k">as</span> <span class="n">ViewModelBase</span><span class="p">;</span></div><div class='line' id='LC37'>			<span class="k">if</span><span class="p">(</span> <span class="n">viewModel</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC38'>			<span class="p">{</span></div><div class='line' id='LC39'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">NavigationContext</span> <span class="p">=</span> <span class="n">NavigationContext</span><span class="p">;</span></div><div class='line' id='LC40'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">OnNavigatingFrom</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span></div><div class='line' id='LC41'>			<span class="p">}</span></div><div class='line' id='LC42'>		<span class="p">}</span></div><div class='line' id='LC43'><br/></div><div class='line' id='LC44'>		<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">OnNavigatedFrom</span><span class="p">(</span> <span class="n">System</span><span class="p">.</span><span class="n">Windows</span><span class="p">.</span><span class="n">Navigation</span><span class="p">.</span><span class="n">NavigationEventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC45'>		<span class="p">{</span></div><div class='line' id='LC46'>			<span class="k">base</span><span class="p">.</span><span class="n">OnNavigatedFrom</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span></div><div class='line' id='LC47'>			<span class="n">var</span> <span class="n">viewModel</span> <span class="p">=</span> <span class="n">DataContext</span> <span class="k">as</span> <span class="n">ViewModelBase</span><span class="p">;</span></div><div class='line' id='LC48'>			<span class="k">if</span><span class="p">(</span> <span class="n">viewModel</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC49'>			<span class="p">{</span></div><div class='line' id='LC50'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">NavigationContext</span> <span class="p">=</span> <span class="n">NavigationContext</span><span class="p">;</span></div><div class='line' id='LC51'>				<span class="n">viewModel</span><span class="p">.</span><span class="n">OnNavigatedFrom</span><span class="p">(</span> <span class="n">e</span> <span class="p">);</span></div><div class='line' id='LC52'>			<span class="p">}</span></div><div class='line' id='LC53'>		<span class="p">}</span></div><div class='line' id='LC54'>	<span class="p">}</span></div><div class='line' id='LC55'><span class="p">}</span></div><div class='line' id='LC56'><br/></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1365757/c00edcada5581b42e3adcb1b366cae0caa11bb47/PageBase.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1365757#file_page_base.cs" style="float:right;margin-right:10px;color:#666">PageBase.cs</a>
            <a href="https://gist.github.com/1365757">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>So, when the page loads the NavigationService is set to the view model. When any of the navigation events occur, they are also called on the view model while setting the NavigationContext.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2011/11/navigation-with-mvvm-on-wp7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Audit Trail with NHibernate Using a Custom log4net Appender</title>
		<link>http://www.joshclose.net/2010/10/audit-trail-with-nhibernate-using-a-custom-log4net-appender/</link>
		<comments>http://www.joshclose.net/2010/10/audit-trail-with-nhibernate-using-a-custom-log4net-appender/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 10:27:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[log4net]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=12</guid>
		<description><![CDATA[I was originally using NHibernate event listeners to do an audit trail, and I might post on that some day. My issue with that was, you get your entities when intercepting. You can save off what’s going with your entites, but I really wanted to save the actual query that NHibernate generates. I wanted to [...]]]></description>
			<content:encoded><![CDATA[<p>I was originally using NHibernate event listeners to do an audit trail, and I might post on that some day. My issue with that was, you get your entities when intercepting. You can save off what’s going with your entites, but I really wanted to save the actual query that NHibernate generates. I wanted to log the same thing that NHProf shows; the actual SQL query.</p>
<p>The way to do this is to create a custom log4net appender that inserts info into your audit table. You need to hook into the NHibernate logs to do this. This is how I did it.</p>
<p>First, create the audit table.</p>
<div id="gist-1366100" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">CREATE</span> <span class="k">TABLE</span> <span class="p">[</span><span class="n">dbo</span><span class="p">].[</span><span class="n">Audit</span><span class="p">]</span></div><div class='line' id='LC2'><span class="p">(</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">[</span><span class="n">Id</span><span class="p">]</span> <span class="nb">INT</span> <span class="k">NOT</span> <span class="k">NULL</span> <span class="k">IDENTITY</span><span class="p">,</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">[</span><span class="k">User</span><span class="p">]</span> <span class="n">NVARCHAR</span><span class="p">(</span> <span class="mi">100</span> <span class="p">)</span> <span class="k">NOT</span> <span class="k">NULL</span><span class="p">,</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">[</span><span class="n">Trail</span><span class="p">]</span> <span class="n">NVARCHAR</span><span class="p">(</span> <span class="k">MAX</span> <span class="p">)</span> <span class="k">NOT</span> <span class="k">NULL</span><span class="p">,</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">[</span><span class="n">Created</span><span class="p">]</span> <span class="n">DATETIME</span> <span class="k">NOT</span> <span class="k">NULL</span></div><div class='line' id='LC7'><span class="p">)</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'><span class="k">ALTER</span> <span class="k">TABLE</span> <span class="p">[</span><span class="n">dbo</span><span class="p">].[</span><span class="n">Audit</span><span class="p">]</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">ADD</span> <span class="k">CONSTRAINT</span> <span class="p">[</span><span class="n">PK_Audit_Id</span><span class="p">]</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">PRIMARY</span> <span class="k">KEY</span> <span class="p">(</span><span class="n">Id</span><span class="p">)</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366100/0d10e3a1bc96f931504ca4d7c3116759a50a4153/Audit.sql" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366100#file_audit.sql" style="float:right;margin-right:10px;color:#666">Audit.sql</a>
            <a href="https://gist.github.com/1366100">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Next, create the log4net appender.</p>
<div id="gist-1366100" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">class</span> <span class="nc">NHibernateAuditAppender</span> <span class="p">:</span> <span class="n">AppenderSkeleton</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">IKernel</span> <span class="n">kernel</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">Append</span><span class="p">(</span> <span class="n">LoggingEvent</span> <span class="n">loggingEvent</span> <span class="p">)</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC7'><span class="cp">#if !DEBUG</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">loggingEvent</span><span class="p">.</span><span class="n">RenderedMessage</span><span class="p">.</span><span class="n">StartsWith</span><span class="p">(</span> <span class="s">&quot;SELECT&quot;</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><span class="cp">#endif</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">session</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">.</span><span class="n">Get</span><span class="p">&lt;</span><span class="n">ISession</span><span class="p">&gt;();</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">audit</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Audit</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Created</span> <span class="p">=</span> <span class="n">DateTime</span><span class="p">.</span><span class="n">UtcNow</span><span class="p">,</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Trail</span> <span class="p">=</span> <span class="n">loggingEvent</span><span class="p">.</span><span class="n">RenderedMessage</span><span class="p">,</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">User</span> <span class="p">=</span> <span class="n">Thread</span><span class="p">.</span><span class="n">CurrentPrincipal</span><span class="p">.</span><span class="n">Identity</span><span class="p">.</span><span class="n">Name</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">session</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span> <span class="n">audit</span> <span class="p">);</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC23'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366100/c068f0f418c8afd33253f1c505f4ac6c9834589b/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366100#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1366100">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>I am using Ninject to get the current NHibernate session being used. All that you really need to know is, get a session from the session factory. The Append method passes in a LoggingEvent. The data that you need from here is the RenderedMessage. The is the formatted message that is to be logged. Create an audit object and save it off to the database. This assumes that you have a mapping set up for for the Audit object to the Audit table. Next, we need to actually hook into the NHibernate logs.</p>
<div id="gist-1366100" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">class</span> <span class="nc">NHibernateAuditAppender</span> <span class="p">:</span> <span class="n">AppenderSkeleton</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">IKernel</span> <span class="n">kernel</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">Append</span><span class="p">(</span> <span class="n">LoggingEvent</span> <span class="n">loggingEvent</span> <span class="p">)</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC7'><span class="cp">#if !DEBUG</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">loggingEvent</span><span class="p">.</span><span class="n">RenderedMessage</span><span class="p">.</span><span class="n">StartsWith</span><span class="p">(</span> <span class="s">&quot;SELECT&quot;</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><span class="cp">#endif</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">session</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">.</span><span class="n">Get</span><span class="p">&lt;</span><span class="n">ISession</span><span class="p">&gt;();</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">audit</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Audit</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Created</span> <span class="p">=</span> <span class="n">DateTime</span><span class="p">.</span><span class="n">UtcNow</span><span class="p">,</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Trail</span> <span class="p">=</span> <span class="n">loggingEvent</span><span class="p">.</span><span class="n">RenderedMessage</span><span class="p">,</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">User</span> <span class="p">=</span> <span class="n">Thread</span><span class="p">.</span><span class="n">CurrentPrincipal</span><span class="p">.</span><span class="n">Identity</span><span class="p">.</span><span class="n">Name</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">session</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span> <span class="n">audit</span> <span class="p">);</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">RegisterAppender</span><span class="p">(</span> <span class="n">IKernel</span> <span class="n">kernel</span> <span class="p">)</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">NHibernateAuditAppender</span><span class="p">.</span><span class="n">kernel</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">;</span></div><div class='line' id='LC27'><br/></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">repository</span> <span class="p">=</span> <span class="p">(</span><span class="n">Hierarchy</span><span class="p">)</span><span class="n">LogManager</span><span class="p">.</span><span class="n">GetRepository</span><span class="p">();</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">appender</span> <span class="p">=</span> <span class="k">new</span> <span class="n">NHibernateAuditAppender</span> <span class="p">{</span> <span class="n">Name</span> <span class="p">=</span> <span class="s">&quot;NHibernateAuditAppender&quot;</span> <span class="p">};</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">logger</span> <span class="p">=</span> <span class="p">(</span><span class="n">Logger</span><span class="p">)</span><span class="n">repository</span><span class="p">.</span><span class="n">GetLogger</span><span class="p">(</span> <span class="s">&quot;NHibernate.SQL&quot;</span> <span class="p">);</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">logger</span><span class="p">.</span><span class="n">Level</span> <span class="p">=</span> <span class="n">Level</span><span class="p">.</span><span class="n">Debug</span><span class="p">;</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">logger</span><span class="p">.</span><span class="n">Additivity</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">logger</span><span class="p">.</span><span class="n">AddAppender</span><span class="p">(</span> <span class="n">appender</span> <span class="p">);</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">appender</span><span class="p">.</span><span class="n">ActivateOptions</span><span class="p">();</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">repository</span><span class="p">.</span><span class="n">Configured</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC37'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366100/ef5c1fb1ac22eea8cab6be229624a8ba533cb652/NHibernateAuditAppender.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366100#file_n_hibernate_audit_appender.cs" style="float:right;margin-right:10px;color:#666">NHibernateAuditAppender.cs</a>
            <a href="https://gist.github.com/1366100">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The RegisterAppender static method was added. Here we get the NHibernate.SQL logger. This is the logger that outputs the actual query that NHibernate generates. Add our appender to the logger, and it’s basically done. You can lookup the other details if you like. <img src='http://www.joshclose.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2010/10/audit-trail-with-nhibernate-using-a-custom-log4net-appender/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Arguments from a Running Process</title>
		<link>http://www.joshclose.net/2009/10/getting-arguments-from-a-running-process/</link>
		<comments>http://www.joshclose.net/2009/10/getting-arguments-from-a-running-process/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:42:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=31</guid>
		<description><![CDATA[If you get all the running processes using .NET, the Process.StartInfo.Arguments will be empty. This seems a little odd, but whatever, let’s find a workaround. Here is some code to get the arguments of a process. Command is the full command line used to start the process. This includes the path and all arguments.]]></description>
			<content:encoded><![CDATA[<p>If you get all the running processes using .NET, the Process.StartInfo.Arguments will be empty.</p>
<div id="gist-1366172" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="n">var</span> <span class="n">processes</span> <span class="p">=</span> <span class="n">Process</span><span class="p">.</span><span class="n">GetProcessesByName</span><span class="p">(</span> <span class="s">&quot;MyProcess&quot;</span> <span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366172/7cec31b5358e0587d7673c6b9b96677f702e107b/File1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366172#file_file1.cs" style="float:right;margin-right:10px;color:#666">File1.cs</a>
            <a href="https://gist.github.com/1366172">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>This seems a little odd, but whatever, let’s find a workaround. Here is some code to get the arguments of a process.</p>
<div id="gist-1366172" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="n">var</span> <span class="n">managementObjectSearcher</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ManagementObjectSearcher</span><span class="p">(</span> <span class="s">&quot;select CommandLine from Win32_Process where Name=&#39;MyProcess.exe&#39;&quot;</span> <span class="p">);</span></div><div class='line' id='LC2'><span class="n">var</span> <span class="n">managementObjects</span> <span class="p">=</span> <span class="n">managementObjectSearcher</span><span class="p">.</span><span class="n">Get</span><span class="p">();</span></div><div class='line' id='LC3'><span class="k">foreach</span><span class="p">(</span> <span class="n">var</span> <span class="n">managementObject</span> <span class="k">in</span> <span class="n">managementObjects</span> <span class="p">)</span></div><div class='line' id='LC4'><span class="p">{</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">command</span> <span class="p">=</span> <span class="p">(</span><span class="kt">string</span><span class="p">)</span><span class="n">managementObject</span><span class="p">[</span><span class="s">&quot;CommandLine&quot;</span><span class="p">];</span></div><div class='line' id='LC6'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366172/3ec268b5cf5ea76647fd0c8556c776fb1caf422a/File2.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366172#file_file2.cs" style="float:right;margin-right:10px;color:#666">File2.cs</a>
            <a href="https://gist.github.com/1366172">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Command is the full command line used to start the process. This includes the path and all arguments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/10/getting-arguments-from-a-running-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting Up WCF with Multiple Services and Multiple Databases Using NHibernate and Ninject</title>
		<link>http://www.joshclose.net/2009/10/setting-up-wcf-with-multiple-services-and-multiple-databases-using-nhibernate-and-ninject/</link>
		<comments>http://www.joshclose.net/2009/10/setting-up-wcf-with-multiple-services-and-multiple-databases-using-nhibernate-and-ninject/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 10:53:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=34</guid>
		<description><![CDATA[This is a tutorial on how to setup WCF using NHibernate and Ninject with multiple databases and services. I’ve seen many examples of how to setup WCF with NHibernate, or Ninject, but not with both. None of the examples I’ve seen have used multiple services or multiples databases either. I had to do this, so [...]]]></description>
			<content:encoded><![CDATA[<p>This is a tutorial on how to setup WCF using NHibernate and Ninject with multiple databases and services. I’ve seen many examples of how to setup WCF with NHibernate, or Ninject, but not with both. None of the examples I’ve seen have used multiple services or multiples databases either. I had to do this, so I thought I’d share. We’ll setup this code as if we’re creating some sort of blog application.</p>
<p>First, create an assembly for each of the following: business logic, services, service contracts, and the service host.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2011/11/image1.png"><img class="alignnone size-full wp-image-35" title="image1" src="http://www.joshclose.net/wp-content/uploads/2011/11/image1.png" alt="" width="244" height="225" /></a></p>
<p>We want to separate all these into different assemblies so we don’t have issues with circular dependencies. The other option is to have everything in a single assembly, but that usually isn’t an option, or a very good one for that matter.</p>
<p><strong>Contracts</strong></p>
<p>The contract assembly is where we keep all the contracts, or interfaces, that are used in our services. This makes it so that the services can reference and use the contracts, and so can a client to the services. If the service is visible to projects outside of yours, you can just give them the contract assembly.</p>
<p>Let’s create a service contract, and some data contracts for our blog application. I put them into folders to separate the service contracts from the data contracts.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2011/11/image2.png"><img class="alignnone size-full wp-image-36" title="image2" src="http://www.joshclose.net/wp-content/uploads/2011/11/image2.png" alt="" width="157" height="151" /></a></p>
<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.ServiceModel</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">Wnn.Service.Contract.DataContracts</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="k">namespace</span> <span class="nn">Wnn.Service.Contract.ServiceContracts</span></div><div class='line' id='LC6'><span class="p">{</span></div><div class='line' id='LC7'><span class="na">    [ServiceContract]</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">interface</span> <span class="n">IBlogService</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'><span class="na">        [OperationContract]</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span> <span class="nf">GetPostById</span><span class="p">(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">);</span></div><div class='line' id='LC12'><span class="na">        [OperationContract]</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">User</span> <span class="nf">GetUserById</span><span class="p">(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">);</span></div><div class='line' id='LC14'><span class="na">        [OperationContract]</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">User</span> <span class="nf">GetUserByUserNameAndPassword</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span> <span class="p">);</span></div><div class='line' id='LC16'><span class="na">        [OperationContract]</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">List</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span> <span class="n">GetPosts</span><span class="p">();</span></div><div class='line' id='LC18'><span class="na">        [OperationContract]</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">List</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span> <span class="n">GetPostsFromAuthor</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span> <span class="p">);</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC21'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/7b3c0a2b591cc51d4b2bab7713586a3275c0b297/IBlogService.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_i_blog_service.cs" style="float:right;margin-right:10px;color:#666">IBlogService.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="n">Post</span><span class="p">.</span><span class="n">cs</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">System.Runtime.Serialization</span><span class="p">;</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="k">namespace</span> <span class="nn">Wnn.Service.Contract.DataContracts</span></div><div class='line' id='LC8'><span class="p">{</span></div><div class='line' id='LC9'><span class="na">    [DataContract]</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">Post</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC12'><span class="na">        [DataMember]</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">int</span> <span class="n">Id</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC14'><span class="na">        [DataMember]</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">Title</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC16'><span class="na">        [DataMember]</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">Content</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC18'><span class="na">        [DataMember]</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">DateTime</span> <span class="n">Created</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC20'><span class="na">        [DataMember]</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">Author</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC22'><span class="na">        [DataMember]</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">List</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">&gt;</span> <span class="n">Tags</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC25'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/7e15bb5b2b4b1ce7765b16c31f62051001e97593/Post.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_post.cs" style="float:right;margin-right:10px;color:#666">Post.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Runtime.Serialization</span><span class="p">;</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="k">namespace</span> <span class="nn">Wnn.Service.Contract.DataContracts</span></div><div class='line' id='LC4'><span class="p">{</span></div><div class='line' id='LC5'><span class="na">    [DataContract]</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">User</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'><span class="na">        [DataMember]</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">int</span> <span class="n">Id</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC10'><span class="na">        [DataMember]</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">UserName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC12'><span class="na">        [DataMember]</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">Email</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC14'><span class="na">        [DataMember]</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">FirstName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC16'><span class="na">        [DataMember]</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">LastName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC19'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/98217286da0392f38f25426ff062a49e048b4a39/User.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_user.cs" style="float:right;margin-right:10px;color:#666">User.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p><strong>Business Logic</strong></p>
<p>Let’s create our business objects, repositories to access our database, and all the NHibernate guts. We don’t have a data layer here because NHibernate IS our data layer. There could still be a use of separating some stuff out into a data layer, but I will not be doing that. References will need to be added to NHibernate.dll, FluentNHibernate.dll, NHibernate.ByteCode.LinFu.dll, and NHibernate.Linq.dll.</p>
<p>Let’s create our POCO (plain old CLR object) business objects. All members need to be virtual so NHibernate can use them.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2011/11/image3.png"><img class="alignnone size-full wp-image-37" title="image3" src="http://www.joshclose.net/wp-content/uploads/2011/11/image3.png" alt="" width="116" height="167" /></a></p>
<p>In the password property we want to encrypt any password that gets set.</p>
<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Security.Cryptography</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.Text</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="k">namespace</span> <span class="nn">Wnn.Business.Objects</span></div><div class='line' id='LC6'><span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">User</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="kt">string</span> <span class="n">password</span><span class="p">;</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">int</span> <span class="n">Id</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">protected</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">UserName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">Email</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">Password</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="n">password</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">set</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">md5</span> <span class="p">=</span> <span class="n">MD5</span><span class="p">.</span><span class="n">Create</span><span class="p">();</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">passwordBytes</span> <span class="p">=</span> <span class="n">Encoding</span><span class="p">.</span><span class="n">UTF8</span><span class="p">.</span><span class="n">GetBytes</span><span class="p">(</span> <span class="k">value</span> <span class="p">);</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">md5</span><span class="p">.</span><span class="n">ComputeHash</span><span class="p">(</span> <span class="n">passwordBytes</span> <span class="p">);</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">password</span> <span class="p">=</span> <span class="n">Convert</span><span class="p">.</span><span class="n">ToBase64String</span><span class="p">(</span> <span class="n">md5</span><span class="p">.</span><span class="n">Hash</span> <span class="p">);</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC25'><br/></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">FirstName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">LastName</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC29'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/84a0ce7d737c407cda3fc4fbc315a7bd7dd59142/User2.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_user2.cs" style="float:right;margin-right:10px;color:#666">User2.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">namespace</span> <span class="nn">Wnn.Business.Objects</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">Tag</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">int</span> <span class="n">Id</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">protected</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">Name</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">Post</span> <span class="n">Post</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC9'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/68ae3b5a49b6da1015042867b98468ed8f1be14a/Tag.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_tag.cs" style="float:right;margin-right:10px;color:#666">Tag.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Objects</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">Post</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">int</span> <span class="n">Id</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">protected</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">Title</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="kt">string</span> <span class="n">Content</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">DateTime</span> <span class="n">Created</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">User</span> <span class="n">Author</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Tag</span><span class="p">&gt;</span> <span class="n">Tags</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">AddTag</span><span class="p">(</span> <span class="n">Tag</span> <span class="n">tag</span> <span class="p">)</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">tag</span><span class="p">.</span><span class="n">Post</span> <span class="p">=</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Tags</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="n">tag</span> <span class="p">);</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC21'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/0d806a7b730b3db47346e57fa9caafa13acc656b/Post2.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_post2.cs" style="float:right;margin-right:10px;color:#666">Post2.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The AddTag method is used to set both sides of the object association. Otherwise NHibernate will not save them properly if a tag is added to the tags list.</p>
<p>Let’s create our NHibernate mapping files now. I use FluentNHibernate to do this.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2009/10/image4.png"><img class="alignnone size-full wp-image-39" title="image4" src="http://www.joshclose.net/wp-content/uploads/2009/10/image4.png" alt="" width="135" height="166" /></a></p>
<p>Since we’re using a backing field for the Password property, we need to have NHibernate use that instead. We don’t want NHibernate to use the property because the stored hash would get hashed again when set.</p>
<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">FluentNHibernate.Mapping</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Mappings</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">UserMap</span> <span class="p">:</span> <span class="n">ClassMap</span><span class="p">&lt;</span><span class="n">User</span><span class="p">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">UserMap</span><span class="p">()</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SetupMapping</span><span class="p">();</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">void</span> <span class="nf">SetupMapping</span><span class="p">()</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Table</span><span class="p">(</span> <span class="s">&quot;Users&quot;</span> <span class="p">);</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Id</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Id</span> <span class="p">);</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Email</span> <span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">FirstName</span> <span class="p">);</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">LastName</span> <span class="p">);</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Password</span> <span class="p">).</span><span class="n">Access</span><span class="p">.</span><span class="n">CamelCaseField</span><span class="p">();</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">UserName</span> <span class="p">);</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/08d05dc7f05a0e17d1c41c582eb6a44face1e154/UserMap.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_user_map.cs" style="float:right;margin-right:10px;color:#666">UserMap.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">FluentNHibernate.Mapping</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Mappings</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">TagMap</span> <span class="p">:</span> <span class="n">ClassMap</span><span class="p">&lt;</span><span class="n">Tag</span><span class="p">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">TagMap</span><span class="p">()</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SetupMapping</span><span class="p">();</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">void</span> <span class="nf">SetupMapping</span><span class="p">()</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Table</span><span class="p">(</span> <span class="s">&quot;Tags&quot;</span> <span class="p">);</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Id</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Id</span> <span class="p">);</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Name</span> <span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">References</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Post</span><span class="p">,</span> <span class="s">&quot;PostId&quot;</span> <span class="p">);</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC21'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/8b86db57b575ef050c62a6507afa7cc7a1aa4c52/TagMap.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_tag_map.cs" style="float:right;margin-right:10px;color:#666">TagMap.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">FluentNHibernate.Mapping</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Mappings</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">PostMap</span> <span class="p">:</span> <span class="n">ClassMap</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">PostMap</span><span class="p">()</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SetupMapping</span><span class="p">();</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">void</span> <span class="nf">SetupMapping</span><span class="p">()</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Table</span><span class="p">(</span> <span class="s">&quot;Posts&quot;</span> <span class="p">);</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Id</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Id</span> <span class="p">);</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Content</span> <span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Map</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Title</span> <span class="p">);</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">References</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Author</span><span class="p">,</span> <span class="s">&quot;UserId&quot;</span> <span class="p">);</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">HasMany</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">Tags</span> <span class="p">)</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">Inverse</span><span class="p">()</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">Cascade</span><span class="p">.</span><span class="n">AllDeleteOrphan</span><span class="p">()</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">KeyColumns</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;PostId&quot;</span> <span class="p">)</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">Fetch</span><span class="p">.</span><span class="n">Subselect</span><span class="p">();</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC27'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/525c88cbf143c0504ca79d6a306c4d1c1e5c32b0/PostMap.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_post_map.cs" style="float:right;margin-right:10px;color:#666">PostMap.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Next we’re going to setup our repositories. This is where we access our data. Before we can do that though, we need to create a SessionManager object. SessionManager is just a wrapper around the NHibernate ISession object to allow for easier unit testing. We’re not hiding the fact that we’re using NHibernate though. The SessionManager wrapper still returns NHibernate objects. This could be completely abstracted so it didn’t matter which ORM or data layer is being used.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2009/10/image5.png"><img class="alignnone size-full wp-image-40" title="image5" src="http://www.joshclose.net/wp-content/uploads/2009/10/image5.png" alt="" width="154" height="131" /></a></p>
<div id="gist-1366196" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Data</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">NHibernate</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">NHibernate.Linq</span><span class="p">;</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="k">namespace</span> <span class="nn">Wnn.Business</span></div><div class='line' id='LC8'><span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">SessionManager</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">ISession</span> <span class="n">session</span><span class="p">;</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">SessionManager</span><span class="p">(</span> <span class="n">ISession</span> <span class="n">session</span> <span class="p">)</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">session</span> <span class="p">==</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nf">ArgumentNullException</span><span class="p">(</span> <span class="s">&quot;session&quot;</span> <span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">session</span> <span class="p">=</span> <span class="n">session</span><span class="p">;</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC22'><br/></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">IQueryable</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span> <span class="n">Linq</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;()</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">session</span><span class="p">.</span><span class="n">Linq</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;();</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC27'><br/></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">T</span> <span class="n">Get</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">)</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">session</span><span class="p">.</span><span class="n">Get</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span> <span class="n">id</span> <span class="p">);</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC32'><br/></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">ISQLQuery</span> <span class="nf">CreateSqlQuery</span><span class="p">(</span> <span class="kt">string</span> <span class="n">queryString</span> <span class="p">)</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">session</span><span class="p">.</span><span class="n">CreateSQLQuery</span><span class="p">(</span> <span class="n">queryString</span> <span class="p">);</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC37'><br/></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">SaveOrUpdate</span><span class="p">(</span> <span class="kt">object</span> <span class="n">obj</span> <span class="p">)</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">session</span><span class="p">.</span><span class="n">SaveOrUpdate</span><span class="p">(</span> <span class="n">obj</span> <span class="p">);</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">Delete</span><span class="p">(</span> <span class="kt">object</span> <span class="n">obj</span> <span class="p">)</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">session</span><span class="p">.</span><span class="n">Delete</span><span class="p">(</span> <span class="n">obj</span> <span class="p">);</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC47'><br/></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">ITransaction</span> <span class="nf">BeginTransaction</span><span class="p">()</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">session</span><span class="p">.</span><span class="n">BeginTransaction</span><span class="p">();</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC52'><br/></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="n">IDbConnection</span> <span class="nf">Close</span><span class="p">()</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">session</span><span class="p">.</span><span class="n">Close</span><span class="p">();</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC57'><br/></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">virtual</span> <span class="k">void</span> <span class="nf">Dispose</span><span class="p">()</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">session</span><span class="p">.</span><span class="n">Dispose</span><span class="p">();</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC63'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366196/5bc84408ac49bcee4980e3c1055d75c48cc62dce/SessionManager.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366196#file_session_manager.cs" style="float:right;margin-right:10px;color:#666">SessionManager.cs</a>
            <a href="https://gist.github.com/1366196">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Now we can create the repositories and a base repository class for common methods.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2009/10/image6.png"><img class="alignnone size-full wp-image-41" title="image6" src="http://www.joshclose.net/wp-content/uploads/2009/10/image6.png" alt="" width="169" height="203" /></a></p>
<p>We put any common methods in the base class.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Repositories</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">abstract</span> <span class="k">class</span> <span class="nc">RepositoryBase</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="n">SessionManager</span> <span class="n">SessionManager</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="nf">RepositoryBase</span><span class="p">(</span> <span class="n">SessionManager</span> <span class="n">sessionManager</span> <span class="p">)</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span> <span class="p">=</span> <span class="n">sessionManager</span><span class="p">;</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">T</span> <span class="nf">Get</span><span class="p">(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">)</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">SessionManager</span><span class="p">.</span><span class="n">Get</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;(</span> <span class="n">id</span> <span class="p">);</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;</span> <span class="n">GetAll</span><span class="p">()</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">SessionManager</span><span class="p">.</span><span class="n">Linq</span><span class="p">&lt;</span><span class="n">T</span><span class="p">&gt;().</span><span class="n">ToList</span><span class="p">();</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">SaveOrUpdate</span><span class="p">(</span> <span class="n">T</span> <span class="n">obj</span> <span class="p">)</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span><span class="p">.</span><span class="n">SaveOrUpdate</span><span class="p">(</span> <span class="n">obj</span> <span class="p">);</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">Delete</span><span class="p">(</span> <span class="n">T</span> <span class="n">obj</span> <span class="p">)</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span><span class="p">.</span><span class="n">Delete</span><span class="p">(</span> <span class="n">obj</span> <span class="p">);</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC35'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/dbc70f99633df1ffa4e8c04e0656d3be18d709c4/RepositoryBase.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_repository_base.cs" style="float:right;margin-right:10px;color:#666">RepositoryBase.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Business.Repositories</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">UserRepository</span> <span class="p">:</span> <span class="n">RepositoryBase</span><span class="p">&lt;</span><span class="n">User</span><span class="p">&gt;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">UserRepository</span><span class="p">(</span> <span class="n">SessionManager</span> <span class="n">sessionManager</span> <span class="p">)</span> <span class="p">:</span> <span class="k">base</span><span class="p">(</span> <span class="n">sessionManager</span> <span class="p">){}</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">User</span> <span class="nf">GetByUserNameAndPassword</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span> <span class="p">)</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span> <span class="n">from</span> <span class="n">u</span> <span class="k">in</span> <span class="n">SessionManager</span><span class="p">.</span><span class="n">Linq</span><span class="p">&lt;</span><span class="n">User</span><span class="p">&gt;()</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">where</span> <span class="n">u</span><span class="p">.</span><span class="n">UserName</span> <span class="p">==</span> <span class="n">userName</span> <span class="p">&amp;&amp;</span> <span class="n">password</span> <span class="p">==</span> <span class="n">u</span><span class="p">.</span><span class="n">Password</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">select</span> <span class="n">u</span> <span class="p">).</span><span class="n">SingleOrDefault</span><span class="p">();</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC17'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/842dea2a268ab4222eb6ed07e1901fee7afa1f80/UserRepository.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_user_repository.cs" style="float:right;margin-right:10px;color:#666">UserRepository.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="k">namespace</span> <span class="nn">Wnn.Business.Repositories</span></div><div class='line' id='LC4'><span class="p">{</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">TagRepository</span> <span class="p">:</span> <span class="n">RepositoryBase</span><span class="p">&lt;</span><span class="n">Tag</span><span class="p">&gt;</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">TagRepository</span><span class="p">(</span> <span class="n">SessionManager</span> <span class="n">sessionManager</span> <span class="p">)</span> <span class="p">:</span> <span class="k">base</span><span class="p">(</span> <span class="n">sessionManager</span> <span class="p">){}</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC9'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/4cb76296396629607799d3a0860b68ddac9d8c4f/TagRepository.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_tag_repository.cs" style="float:right;margin-right:10px;color:#666">TagRepository.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">Wnn.Business.Objects</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="k">namespace</span> <span class="nn">Wnn.Business.Repositories</span></div><div class='line' id='LC6'><span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">PostRepository</span> <span class="p">:</span> <span class="n">RepositoryBase</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">PostRepository</span><span class="p">(</span> <span class="n">SessionManager</span> <span class="n">sessionManager</span> <span class="p">)</span> <span class="p">:</span> <span class="k">base</span><span class="p">(</span> <span class="n">sessionManager</span> <span class="p">){}</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span> <span class="n">GetAllForUser</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span> <span class="p">)</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span> <span class="n">from</span> <span class="n">p</span> <span class="k">in</span> <span class="n">SessionManager</span><span class="p">.</span><span class="n">Linq</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;()</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">where</span> <span class="n">p</span><span class="p">.</span><span class="n">Author</span><span class="p">.</span><span class="n">UserName</span> <span class="p">==</span> <span class="n">userName</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">select</span> <span class="n">p</span> <span class="p">).</span><span class="n">ToList</span><span class="p">();</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC18'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/ec4aff2d837d3a82dbfbb8c6248333e526c07175/PostRepository.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_post_repository.cs" style="float:right;margin-right:10px;color:#666">PostRepository.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p><strong>Services</strong></p>
<p>Now that we have our repositories setup, we can implement the services that will use the repositories.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2009/10/image7.png"><img class="alignnone size-full wp-image-42" title="image7" src="http://www.joshclose.net/wp-content/uploads/2009/10/image7.png" alt="" width="134" height="76" /></a></p>
<p>We need to set the InstanceContextMode to PerCall. This makes it so WCF will create a new context instance per service call. This sets up NHibernate nicely because we can then start a transaction at the beginning of every service method call, and end the transaction at the end of the call, rolling back if an error occurred. More on that later.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.ServiceModel</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">Wnn.Business.Repositories</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">Wnn.Service.Contract.DataContracts</span><span class="p">;</span></div><div class='line' id='LC6'><span class="k">using</span> <span class="nn">Wnn.Service.Contract.ServiceContracts</span><span class="p">;</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'><span class="k">namespace</span> <span class="nn">Wnn.Service</span></div><div class='line' id='LC9'><span class="p">{</span></div><div class='line' id='LC10'><span class="na">    [ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall )]</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">BlogService</span> <span class="p">:</span> <span class="n">IBlogService</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">UserRepository</span> <span class="n">userRepository</span><span class="p">;</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">PostRepository</span> <span class="n">postRepository</span><span class="p">;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">TagRepository</span> <span class="n">tagRepository</span><span class="p">;</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">BlogService</span><span class="p">(</span> <span class="n">UserRepository</span> <span class="n">userRepository</span><span class="p">,</span> <span class="n">PostRepository</span> <span class="n">postRepository</span><span class="p">,</span> <span class="n">TagRepository</span> <span class="n">tagRepository</span> <span class="p">)</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">userRepository</span> <span class="p">=</span> <span class="n">userRepository</span><span class="p">;</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">postRepository</span> <span class="p">=</span> <span class="n">postRepository</span><span class="p">;</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">tagRepository</span> <span class="p">=</span> <span class="n">tagRepository</span><span class="p">;</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">Post</span> <span class="nf">GetPostById</span><span class="p">(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">)</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nf">ConvertPost</span><span class="p">(</span> <span class="n">postRepository</span><span class="p">.</span><span class="n">Get</span><span class="p">(</span> <span class="n">id</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">User</span> <span class="nf">GetUserById</span><span class="p">(</span> <span class="kt">int</span> <span class="n">id</span> <span class="p">)</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nf">ConvertUser</span><span class="p">(</span> <span class="n">userRepository</span><span class="p">.</span><span class="n">Get</span><span class="p">(</span> <span class="n">id</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">User</span> <span class="nf">GetUserByUserNameAndPassword</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span><span class="p">,</span> <span class="kt">string</span> <span class="n">password</span> <span class="p">)</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nf">ConvertUser</span><span class="p">(</span> <span class="n">userRepository</span><span class="p">.</span><span class="n">GetByUserNameAndPassword</span><span class="p">(</span> <span class="n">userName</span><span class="p">,</span> <span class="n">password</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC38'><br/></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span> <span class="n">GetPosts</span><span class="p">()</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span> <span class="n">from</span> <span class="n">p</span> <span class="k">in</span> <span class="n">postRepository</span><span class="p">.</span><span class="n">GetAll</span><span class="p">()</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">select</span> <span class="nf">ConvertPost</span><span class="p">(</span> <span class="n">p</span> <span class="p">)</span> <span class="p">).</span><span class="n">ToList</span><span class="p">();</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC44'><br/></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">Post</span><span class="p">&gt;</span> <span class="n">GetPostsFromAuthor</span><span class="p">(</span> <span class="kt">string</span> <span class="n">userName</span> <span class="p">)</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="p">(</span> <span class="n">from</span> <span class="n">p</span> <span class="k">in</span> <span class="n">postRepository</span><span class="p">.</span><span class="n">GetAllForUser</span><span class="p">(</span> <span class="n">userName</span> <span class="p">)</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">select</span> <span class="nf">ConvertPost</span><span class="p">(</span> <span class="n">p</span> <span class="p">)</span> <span class="p">).</span><span class="n">ToList</span><span class="p">();</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC50'><br/></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">User</span> <span class="nf">ConvertUser</span><span class="p">(</span> <span class="n">Business</span><span class="p">.</span><span class="n">Objects</span><span class="p">.</span><span class="n">User</span> <span class="n">userData</span> <span class="p">)</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">User</span> <span class="n">user</span> <span class="p">=</span> <span class="k">null</span><span class="p">;</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">userData</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">user</span> <span class="p">=</span> <span class="k">new</span> <span class="n">User</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Email</span> <span class="p">=</span> <span class="n">userData</span><span class="p">.</span><span class="n">Email</span><span class="p">,</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">FirstName</span> <span class="p">=</span> <span class="n">userData</span><span class="p">.</span><span class="n">FirstName</span><span class="p">,</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Id</span> <span class="p">=</span> <span class="n">userData</span><span class="p">.</span><span class="n">Id</span><span class="p">,</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">LastName</span> <span class="p">=</span> <span class="n">userData</span><span class="p">.</span><span class="n">LastName</span><span class="p">,</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">UserName</span> <span class="p">=</span> <span class="n">userData</span><span class="p">.</span><span class="n">UserName</span><span class="p">,</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">user</span><span class="p">;</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC67'><br/></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">Post</span> <span class="nf">ConvertPost</span><span class="p">(</span> <span class="n">Business</span><span class="p">.</span><span class="n">Objects</span><span class="p">.</span><span class="n">Post</span> <span class="n">postData</span> <span class="p">)</span></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Post</span> <span class="n">post</span> <span class="p">=</span> <span class="k">null</span><span class="p">;</span></div><div class='line' id='LC71'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">postData</span> <span class="p">!=</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">post</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Post</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC75'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Author</span> <span class="p">=</span> <span class="n">postData</span><span class="p">.</span><span class="n">Author</span><span class="p">.</span><span class="n">UserName</span><span class="p">,</span></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Content</span> <span class="p">=</span> <span class="n">postData</span><span class="p">.</span><span class="n">Content</span><span class="p">,</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Created</span> <span class="p">=</span> <span class="n">postData</span><span class="p">.</span><span class="n">Created</span><span class="p">,</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Id</span> <span class="p">=</span> <span class="n">postData</span><span class="p">.</span><span class="n">Id</span><span class="p">,</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Title</span> <span class="p">=</span> <span class="n">postData</span><span class="p">.</span><span class="n">Title</span><span class="p">,</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Tags</span> <span class="p">=</span> <span class="p">(</span> <span class="n">from</span> <span class="n">t</span> <span class="k">in</span> <span class="n">postData</span><span class="p">.</span><span class="n">Tags</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">select</span> <span class="n">t</span><span class="p">.</span><span class="n">Name</span> <span class="p">).</span><span class="n">ToList</span><span class="p">()</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC83'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC84'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">post</span><span class="p">;</span></div><div class='line' id='LC85'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC86'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC87'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/ef7bfca5bd0cf73b6abf1eadc587febacc029948/BlogService.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_blog_service.cs" style="float:right;margin-right:10px;color:#666">BlogService.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p><strong>Service Host</strong></p>
<p>The service host is what actually starts up all of our services. In this case, just one service, but this is being created so we can have as many as we want.</p>
<p><a href="http://www.joshclose.net/wp-content/uploads/2009/10/image8.png"><img class="alignnone size-full wp-image-44" title="image8" src="http://www.joshclose.net/wp-content/uploads/2009/10/image8.png" alt="" width="244" height="140" /></a></p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.ServiceModel</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">ServiceHostEngine</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">ServiceHost</span><span class="p">&gt;</span> <span class="n">serviceHosts</span> <span class="p">=</span> <span class="k">new</span> <span class="n">List</span><span class="p">&lt;</span><span class="n">ServiceHost</span><span class="p">&gt;();</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">ServiceHostEngine</span><span class="p">()</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// We can have multiple services listed here.</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// We could actually have a list of services in a config</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// file that is dynamically loaded here also.</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">serviceHosts</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="k">new</span> <span class="n">ServiceHost</span><span class="p">(</span> <span class="k">typeof</span><span class="p">(</span> <span class="n">BlogService</span> <span class="p">)</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">Start</span><span class="p">()</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span><span class="p">(</span> <span class="n">var</span> <span class="n">serviceHost</span> <span class="k">in</span> <span class="n">serviceHosts</span> <span class="p">)</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">serviceHost</span><span class="p">.</span><span class="n">Open</span><span class="p">();</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC25'><br/></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">Stop</span><span class="p">()</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span><span class="p">(</span> <span class="n">var</span> <span class="n">serviceHost</span> <span class="k">in</span> <span class="n">serviceHosts</span> <span class="p">)</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">serviceHost</span><span class="p">.</span><span class="n">Close</span><span class="p">();</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/0e77a5e585af179198d3c6e65f91db92b5172312/ServiceHostEngine.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_service_host_engine.cs" style="float:right;margin-right:10px;color:#666">ServiceHostEngine.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>We are now to a part where Ninject is used to create the NHibernate session instances. We need to create a factory for creating NHibernate SessionFactories. We need a factory for every database that is being used. So, we need a SessionFactoryFactory. This will be back in our business layer.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">FluentNHibernate.Cfg</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">NHibernate</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="k">namespace</span> <span class="nn">Wnn.Business</span></div><div class='line' id='LC6'><span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">static</span> <span class="k">class</span> <span class="nc">SessionFactoryFactory</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="k">readonly</span> <span class="kt">object</span> <span class="n">locker</span> <span class="p">=</span> <span class="k">new</span> <span class="kt">object</span><span class="p">();</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="k">readonly</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="n">ISessionFactory</span><span class="p">&gt;</span> <span class="n">sessionFactories</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Dictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="n">ISessionFactory</span><span class="p">&gt;();</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">static</span> <span class="n">ISessionFactory</span> <span class="nf">GetSessionFactory</span><span class="p">(</span> <span class="kt">string</span> <span class="n">connectionStringKey</span> <span class="p">)</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ISessionFactory</span> <span class="n">sessionFactory</span><span class="p">;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sessionFactories</span><span class="p">.</span><span class="n">TryGetValue</span><span class="p">(</span> <span class="n">connectionStringKey</span><span class="p">,</span> <span class="k">out</span> <span class="n">sessionFactory</span> <span class="p">);</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Double check locking is used here because</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// WCF could have many instances accessing this</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// code at the same time.</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">sessionFactory</span> <span class="p">==</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">lock</span><span class="p">(</span> <span class="n">locker</span> <span class="p">)</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sessionFactories</span><span class="p">.</span><span class="n">TryGetValue</span><span class="p">(</span> <span class="n">connectionStringKey</span><span class="p">,</span> <span class="k">out</span> <span class="n">sessionFactory</span> <span class="p">);</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">sessionFactory</span> <span class="p">==</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sessionFactory</span> <span class="p">=</span> <span class="n">Fluently</span><span class="p">.</span><span class="n">Configure</span><span class="p">()</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">Database</span><span class="p">(</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">FluentNHibernate</span><span class="p">.</span><span class="n">Cfg</span><span class="p">.</span><span class="n">Db</span><span class="p">.</span><span class="n">MsSqlConfiguration</span><span class="p">.</span><span class="n">MsSql2005</span><span class="p">.</span><span class="n">ConnectionString</span><span class="p">(</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">c</span> <span class="p">=&gt;</span> <span class="n">c</span><span class="p">.</span><span class="n">FromConnectionStringWithKey</span><span class="p">(</span> <span class="n">connectionStringKey</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">ProxyFactoryFactory</span><span class="p">(</span> <span class="s">&quot;NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu&quot;</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">Mappings</span><span class="p">(</span> <span class="n">m</span> <span class="p">=&gt;</span> <span class="n">m</span><span class="p">.</span><span class="n">FluentMappings</span><span class="p">.</span><span class="n">AddFromAssembly</span><span class="p">(</span> <span class="k">typeof</span><span class="p">(</span> <span class="n">SessionFactoryFactory</span> <span class="p">).</span><span class="n">Assembly</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">ExposeConfiguration</span><span class="p">(</span> <span class="n">cfg</span> <span class="p">=&gt;</span> <span class="n">cfg</span><span class="p">.</span><span class="n">SetProperty</span><span class="p">(</span> <span class="s">&quot;generate_statistics&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">ExposeConfiguration</span><span class="p">(</span> <span class="n">cfg</span> <span class="p">=&gt;</span> <span class="n">cfg</span><span class="p">.</span><span class="n">SetProperty</span><span class="p">(</span> <span class="s">&quot;adonet.batch_size&quot;</span><span class="p">,</span> <span class="s">&quot;10&quot;</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">BuildSessionFactory</span><span class="p">();</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">sessionFactories</span><span class="p">[</span><span class="n">connectionStringKey</span><span class="p">]</span> <span class="p">=</span> <span class="n">sessionFactory</span><span class="p">;</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC41'><br/></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">sessionFactory</span><span class="p">;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC45'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/e7d32345b2b49147085224068370fcd8225b57b1/SessionFactoryFactory.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_session_factory_factory.cs" style="float:right;margin-right:10px;color:#666">SessionFactoryFactory.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Now that we are able to create NHibernate sessions, let’s setup Ninject to create the ISession an SessionManager objects for us. We need to pass the connection string in to our Ninject setup so the SessionFactoryFactory can use the correct database connection. We will be creating a new Ninject kernel each WCF call, passing in the connection string.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">NHibernate</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">Ninject.Modules</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">Wnn.Business</span><span class="p">;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host</span></div><div class='line' id='LC6'><span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">NinjectSetup</span> <span class="p">:</span> <span class="n">NinjectModule</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="kt">string</span> <span class="n">connectionStringKey</span><span class="p">;</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">NinjectSetup</span><span class="p">(</span> <span class="kt">string</span> <span class="n">connectionStringKey</span> <span class="p">)</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">connectionStringKey</span> <span class="p">=</span> <span class="n">connectionStringKey</span><span class="p">;</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC15'><br/></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">Load</span><span class="p">()</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Bind</span><span class="p">&lt;</span><span class="n">ISession</span><span class="p">&gt;()</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">ToMethod</span><span class="p">(</span> <span class="n">ctx</span> <span class="p">=&gt;</span> <span class="n">SessionFactoryFactory</span><span class="p">.</span><span class="n">GetSessionFactory</span><span class="p">(</span> <span class="n">connectionStringKey</span> <span class="p">).</span><span class="n">OpenSession</span><span class="p">()</span> <span class="p">)</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">InSingletonScope</span><span class="p">();</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Bind</span><span class="p">&lt;</span><span class="n">SessionManager</span><span class="p">&gt;()</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">ToSelf</span><span class="p">()</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">.</span><span class="n">InSingletonScope</span><span class="p">();</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC27'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/65d98814ecfa2ffd582d028dfa03dc0bbd28aa9b/NinjectSetup.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_ninject_setup.cs" style="float:right;margin-right:10px;color:#666">NinjectSetup.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Now we can create our instance provider. The provider is what creates the instances that WCF uses. This gets called for every service method call because we used InstanceContextMode.PerCall for our services.</p>
<p>In the GetInstance method (which again happens per call), we create a Ninject kernel that we can use to create our objects for us. A SessionManager is created and a transaction is started. A transaction is meant to be used for a unit of work. Our unit of work here is a single service method call. A new service instance is then created by Ninject. This means that all our repositories in the constructor of the services will be injected for us.</p>
<p>The ReleaseInstance method is then called when the request is complete. In here we commit our transaction. If there are any errors, they are rolled back. The session is then closed.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Runtime.Remoting.Messaging</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.ServiceModel</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">System.ServiceModel.Channels</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">System.ServiceModel.Dispatcher</span><span class="p">;</span></div><div class='line' id='LC6'><span class="k">using</span> <span class="nn">NHibernate</span><span class="p">;</span></div><div class='line' id='LC7'><span class="k">using</span> <span class="nn">Ninject</span><span class="p">;</span></div><div class='line' id='LC8'><span class="k">using</span> <span class="nn">Wnn.Business</span><span class="p">;</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host</span></div><div class='line' id='LC11'><span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">NHibernateInstanceProvider</span> <span class="p">:</span> <span class="n">IInstanceProvider</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">const</span> <span class="kt">string</span> <span class="n">sessionKey</span> <span class="p">=</span> <span class="s">&quot;ThreadSession&quot;</span><span class="p">;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">const</span> <span class="kt">string</span> <span class="n">transactionKey</span> <span class="p">=</span> <span class="s">&quot;ThreadTransaction&quot;</span><span class="p">;</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">readonly</span> <span class="n">Type</span> <span class="n">serviceType</span><span class="p">;</span></div><div class='line' id='LC17'><br/></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">SessionManager</span> <span class="n">SessionManager</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="n">CallContext</span><span class="p">.</span><span class="n">GetData</span><span class="p">(</span> <span class="n">sessionKey</span> <span class="p">)</span> <span class="k">as</span> <span class="n">SessionManager</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">set</span> <span class="p">{</span> <span class="n">CallContext</span><span class="p">.</span><span class="n">SetData</span><span class="p">(</span> <span class="n">sessionKey</span><span class="p">,</span> <span class="k">value</span> <span class="p">);</span> <span class="p">}</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="n">ITransaction</span> <span class="n">Transaction</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="n">CallContext</span><span class="p">.</span><span class="n">GetData</span><span class="p">(</span> <span class="n">transactionKey</span> <span class="p">)</span> <span class="k">as</span> <span class="n">ITransaction</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">set</span> <span class="p">{</span> <span class="n">CallContext</span><span class="p">.</span><span class="n">SetData</span><span class="p">(</span> <span class="n">transactionKey</span><span class="p">,</span> <span class="k">value</span> <span class="p">);</span> <span class="p">}</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">NHibernateInstanceProvider</span><span class="p">(</span> <span class="n">Type</span> <span class="n">serviceType</span> <span class="p">)</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="n">serviceType</span> <span class="p">=</span> <span class="n">serviceType</span><span class="p">;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'><br/></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">object</span> <span class="nf">GetInstance</span><span class="p">(</span> <span class="n">InstanceContext</span> <span class="n">instanceContext</span> <span class="p">)</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="nf">GetInstance</span><span class="p">(</span> <span class="n">instanceContext</span><span class="p">,</span> <span class="k">null</span> <span class="p">);</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC39'><br/></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">object</span> <span class="nf">GetInstance</span><span class="p">(</span> <span class="n">InstanceContext</span> <span class="n">instanceContext</span><span class="p">,</span> <span class="n">Message</span> <span class="n">message</span> <span class="p">)</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">connectionStringKey</span> <span class="p">=</span> <span class="n">GetConnectionStringKey</span><span class="p">(</span> <span class="n">serviceType</span> <span class="p">);</span></div><div class='line' id='LC43'><br/></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">kernel</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StandardKernel</span><span class="p">(</span> <span class="k">new</span> <span class="n">NinjectSetup</span><span class="p">(</span> <span class="n">connectionStringKey</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">.</span><span class="n">Get</span><span class="p">&lt;</span><span class="n">SessionManager</span><span class="p">&gt;();</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Transaction</span> <span class="p">=</span> <span class="n">SessionManager</span><span class="p">.</span><span class="n">BeginTransaction</span><span class="p">();</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">instance</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">.</span><span class="n">Get</span><span class="p">(</span> <span class="n">serviceType</span> <span class="p">);</span></div><div class='line' id='LC50'><br/></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">instance</span><span class="p">;</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC53'><br/></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">ReleaseInstance</span><span class="p">(</span> <span class="n">InstanceContext</span> <span class="n">instanceContext</span><span class="p">,</span> <span class="kt">object</span> <span class="n">instance</span> <span class="p">)</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Transaction</span><span class="p">.</span><span class="n">Commit</span><span class="p">();</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">catch</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Transaction</span><span class="p">.</span><span class="n">Rollback</span><span class="p">();</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">finally</span></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span><span class="p">.</span><span class="n">Close</span><span class="p">();</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">SessionManager</span><span class="p">.</span><span class="n">Dispose</span><span class="p">();</span></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC70'><br/></div><div class='line' id='LC71'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">GetConnectionStringKey</span><span class="p">(</span> <span class="n">Type</span> <span class="n">serviceType</span> <span class="p">)</span></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// All of our database connections should</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// go here. We could also put all of these types</span></div><div class='line' id='LC75'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// into a config file and load them dynamically.</span></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">string</span> <span class="n">connectionStringKey</span><span class="p">;</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">serviceType</span> <span class="p">==</span> <span class="k">typeof</span><span class="p">(</span> <span class="n">BlogService</span> <span class="p">)</span> <span class="p">)</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">connectionStringKey</span> <span class="p">=</span> <span class="s">&quot;Dashboard&quot;</span><span class="p">;</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC83'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="k">new</span> <span class="nf">Exception</span><span class="p">(</span> <span class="s">&quot;Service type &#39;{0}&#39; does not match any database connection.&quot;</span> <span class="p">);</span></div><div class='line' id='LC84'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC85'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">connectionStringKey</span><span class="p">;</span></div><div class='line' id='LC86'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC87'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC88'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/fb696e617f9fb6a83c2f166f3b388d711be1ad40/NHibernateInstanceProvider.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_n_hibernate_instance_provider.cs" style="float:right;margin-right:10px;color:#666">NHibernateInstanceProvider.cs</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Now you may be wondering how all of this is setup. How do we let WCF know that it should use our instance provider instead? There are a couple custom configuration classes we need to create and we need to add our provider to the WCF configuration. Whatever app is running the WCF service; console app, windows service, or web app; a custom behavior needs to be added to it. In the services section, we setup our service with our custom element.</p>
<div id="gist-1366219" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;system.serviceModel&gt;</span></div><div class='line' id='LC2'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;extensions&gt;</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;behaviorExtensions&gt;</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;add</span> <span class="na">name=</span><span class="s">&quot;nhibernateServiceBehavior&quot;</span> <span class="na">type=</span><span class="s">&quot;Wnn.Service.Host.NHibernateBehaviorExtensionElement, Wnn.Service.Host, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/behaviorExtensions&gt;</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/extensions&gt;</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;behaviors&gt;</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;serviceBehaviors&gt;</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;behavior</span> <span class="na">name=</span><span class="s">&quot;nhibernateServiceBehavior&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;nhibernateServiceBehavior</span> <span class="nt">/&gt;</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;serviceMetadata</span> <span class="nt">/&gt;</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/behavior&gt;</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/serviceBehaviors&gt;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;endpointBehaviors&gt;</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;behavior</span> <span class="na">name=</span><span class="s">&quot;HttpEnableBehavior&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;webHttp/&gt;</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/behavior&gt;</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/endpointBehaviors&gt;</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/behaviors&gt;</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;services&gt;</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;service</span> <span class="na">name=</span><span class="s">&quot;Wnn.Service.BlogService&quot;</span> <span class="na">behaviorConfiguration=</span><span class="s">&quot;nhibernateServiceBehavior&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;host&gt;</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;baseAddresses&gt;</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;add</span> <span class="na">baseAddress=</span><span class="s">&quot;net.tcp://localhost:8761/Services/&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/baseAddresses&gt;</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/host&gt;</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;endpoint</span> <span class="na">address=</span><span class="s">&quot;Blog&quot;</span> <span class="na">binding=</span><span class="s">&quot;netTcpBinding&quot;</span> <span class="na">contract=</span><span class="s">&quot;Wnn.Service.Contract.ServiceContracts.IBlogService&quot;</span> <span class="nt">/&gt;</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/service&gt;</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/services&gt;</span></div><div class='line' id='LC32'><span class="nt">&lt;/system.serviceModel&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366219/b534c73d28860c5e2c682ec27b485f62ac55f25e/web.config.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366219#file_web.config.xml" style="float:right;margin-right:10px;color:#666">web.config.xml</a>
            <a href="https://gist.github.com/1366219">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The custom element returns a new instance of our service behavior.</p>
<div id="gist-1366231" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.ServiceModel.Configuration</span><span class="p">;</span></div><div class='line' id='LC3'><br/></div><div class='line' id='LC4'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host</span></div><div class='line' id='LC5'><span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">NHibernateBehaviorExtensionElement</span> <span class="p">:</span> <span class="n">BehaviorExtensionElement</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">protected</span> <span class="k">override</span> <span class="kt">object</span> <span class="nf">CreateBehavior</span><span class="p">()</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">new</span> <span class="nf">NHibernateServiceBehavior</span><span class="p">();</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">override</span> <span class="n">Type</span> <span class="n">BehaviorType</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="k">typeof</span><span class="p">(</span> <span class="n">NHibernateServiceBehavior</span> <span class="p">);</span> <span class="p">}</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC18'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366231/32c93eb9bdcc02582cc4bb74d1634aa5b0acd114/NHibernateBehaviorExtensionElement.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366231#file_n_hibernate_behavior_extension_element.cs" style="float:right;margin-right:10px;color:#666">NHibernateBehaviorExtensionElement.cs</a>
            <a href="https://gist.github.com/1366231">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The service behavior is what actually creates out custom instance provider, passing in the service that is being used.</p>
<div id="gist-1366231" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Collections.ObjectModel</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.ServiceModel</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">System.ServiceModel.Channels</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">System.ServiceModel.Description</span><span class="p">;</span></div><div class='line' id='LC6'><span class="k">using</span> <span class="nn">System.ServiceModel.Dispatcher</span><span class="p">;</span></div><div class='line' id='LC7'><br/></div><div class='line' id='LC8'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host</span></div><div class='line' id='LC9'><span class="p">{</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">NHibernateServiceBehavior</span> <span class="p">:</span> <span class="n">Attribute</span><span class="p">,</span> <span class="n">IServiceBehavior</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">Validate</span><span class="p">(</span> <span class="n">ServiceDescription</span> <span class="n">serviceDescription</span><span class="p">,</span> <span class="n">ServiceHostBase</span> <span class="n">serviceHostBase</span> <span class="p">)</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC15'><br/></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">AddBindingParameters</span><span class="p">(</span> <span class="n">ServiceDescription</span> <span class="n">serviceDescription</span><span class="p">,</span> <span class="n">ServiceHostBase</span> <span class="n">serviceHostBase</span><span class="p">,</span> <span class="n">Collection</span><span class="p">&lt;</span><span class="n">ServiceEndpoint</span><span class="p">&gt;</span> <span class="n">endpoints</span><span class="p">,</span> <span class="n">BindingParameterCollection</span> <span class="n">bindingParameters</span> <span class="p">)</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">void</span> <span class="nf">ApplyDispatchBehavior</span><span class="p">(</span> <span class="n">ServiceDescription</span> <span class="n">serviceDescription</span><span class="p">,</span> <span class="n">ServiceHostBase</span> <span class="n">serviceHostBase</span> <span class="p">)</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span><span class="p">(</span> <span class="n">var</span> <span class="n">channelDispatcherBase</span> <span class="k">in</span> <span class="n">serviceHostBase</span><span class="p">.</span><span class="n">ChannelDispatchers</span> <span class="p">)</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">channelDispatcher</span> <span class="p">=</span> <span class="n">channelDispatcherBase</span> <span class="k">as</span> <span class="n">ChannelDispatcher</span><span class="p">;</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">channelDispatcher</span> <span class="p">==</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">continue</span><span class="p">;</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">foreach</span><span class="p">(</span> <span class="n">var</span> <span class="n">ed</span> <span class="k">in</span> <span class="n">channelDispatcher</span><span class="p">.</span><span class="n">Endpoints</span> <span class="p">)</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ed</span><span class="p">.</span><span class="n">DispatchRuntime</span><span class="p">.</span><span class="n">InstanceProvider</span> <span class="p">=</span> <span class="k">new</span> <span class="n">NHibernateInstanceProvider</span><span class="p">(</span> <span class="n">serviceDescription</span><span class="p">.</span><span class="n">ServiceType</span> <span class="p">);</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC37'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366231/85ea417bc3e50643cd05ee7de3f73fc66ddc8122/NHibernateServiceBehavior.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366231#file_n_hibernate_service_behavior.cs" style="float:right;margin-right:10px;color:#666">NHibernateServiceBehavior.cs</a>
            <a href="https://gist.github.com/1366231">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The WCF setup is now complete. We able to have multiple services running and use multiple databases. All the services objects are created by Ninject. Our WCF application is now a lot more unit testable that it was before. This may seem like a lot of work to setup, but once it’s done, everything else is a breeze. You will be able to add services and databases easily, and you don’t have to worry about creating your objects in your service.</p>
<p>The last step is to actually host this service in a console app, windows service or web app. You are limited to only using HTTP bindings if you choose to use an IIS hosted service. All you have to do then is to create an instance of the ServiceHostEngine, and start it.</p>
<p>Here is an example of a console app:</p>
<div id="gist-1366231" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">namespace</span> <span class="nn">Wnn.Service.Host.Console</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">class</span> <span class="nc">Program</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">static</span> <span class="k">void</span> <span class="nf">Main</span><span class="p">(</span> <span class="kt">string</span><span class="p">[]</span> <span class="n">args</span> <span class="p">)</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">service</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ServiceHostEngine</span><span class="p">();</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">service</span><span class="p">.</span><span class="n">Start</span><span class="p">();</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">System</span><span class="p">.</span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="s">&quot;Press any key to stop the services&quot;</span> <span class="p">);</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">System</span><span class="p">.</span><span class="n">Console</span><span class="p">.</span><span class="n">ReadKey</span><span class="p">();</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC13'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366231/19647047bff13724121646c21739aec89afef4e7/Program.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366231#file_program.cs" style="float:right;margin-right:10px;color:#666">Program.cs</a>
            <a href="https://gist.github.com/1366231">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>I put the code up on github. <a href="http://github.com/JoshClose/WcfNhibernateNinjectExample" target="_blank">http://github.com/JoshClose/WcfNhibernateNinjectExample</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/10/setting-up-wcf-with-multiple-services-and-multiple-databases-using-nhibernate-and-ninject/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmatically Taking a Full Web Page Screenshot</title>
		<link>http://www.joshclose.net/2009/09/programmatically-taking-a-full-web-page-screenshot/</link>
		<comments>http://www.joshclose.net/2009/09/programmatically-taking-a-full-web-page-screenshot/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 05:37:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[P/Invoke]]></category>
		<category><![CDATA[Screen Shot]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=49</guid>
		<description><![CDATA[I needed to programmatically take a screenshot of a full web page, and not just the visible area. When I set out to accomplish this task, I didn’t realize how tough it was actually going to be. The reason it was tough wasn’t because it was hard to do, but that there were many different [...]]]></description>
			<content:encoded><![CDATA[<p>I needed to programmatically take a screenshot of a full web page, and not just the visible area. When I set out to accomplish this task, I didn’t realize how tough it was actually going to be.</p>
<p>The reason it was tough wasn’t because it was hard to do, but that there were many different ways of doing it, and each had different results. Some ways would only capture the visible screen. Some would be missing backgrounds. Some wouldn’t capture pages that loaded with JavaScript, such as google.com.</p>
<p>I was able to find a way that has worked on every site I’ve tested so far that is a combination of many of the other methods I’ve found. This way also does not require any assembly outside of the System namespace.</p>
<p>The code is pretty small and self explanatory, so here is how I did it.</p>
<div id="gist-1366260" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Drawing</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.Runtime.InteropServices</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">System.Windows.Forms</span><span class="p">;</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'><span class="k">public</span> <span class="k">class</span> <span class="nc">ScreenShot</span></div><div class='line' id='LC7'><span class="p">{</span></div><div class='line' id='LC8'><span class="na">    [ComImport]</span></div><div class='line' id='LC9'><span class="na">    [InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]</span></div><div class='line' id='LC10'><span class="na">    [Guid( &quot;0000010d-0000-0000-C000-000000000046&quot; )]</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">interface</span> <span class="n">IViewObject</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC13'><span class="na">        [PreserveSig]</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="nf">Draw</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">dwDrawAspect</span><span class="p">,</span> <span class="kt">int</span> <span class="n">lindex</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">pvAspect</span><span class="p">,</span></div><div class='line' id='LC15'><span class="na">                  [In]</span> <span class="cm">/*tagDVTARGETDEVICE*/</span> <span class="n">IntPtr</span> <span class="n">ptd</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">hdcTargetDev</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">hdcDraw</span><span class="p">,</span></div><div class='line' id='LC16'><span class="na">                  [In]</span> <span class="cm">/*COMRECT*/</span> <span class="n">Rectangle</span> <span class="n">lprcBounds</span><span class="p">,</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="cm">/*COMRECT*/</span> <span class="n">IntPtr</span> <span class="n">lprcWBounds</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">pfnContinue</span><span class="p">,</span></div><div class='line' id='LC17'><span class="na">                  [In]</span> <span class="kt">int</span> <span class="n">dwContinue</span> <span class="p">);</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'><span class="na">        [PreserveSig]</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="nf">GetColorSet</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">dwDrawAspect</span><span class="p">,</span> <span class="kt">int</span> <span class="n">lindex</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">pvAspect</span><span class="p">,</span></div><div class='line' id='LC21'><span class="na">                         [In]</span> <span class="cm">/*tagDVTARGETDEVICE*/</span> <span class="n">IntPtr</span> <span class="n">ptd</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">hicTargetDev</span><span class="p">,</span> <span class="p">[</span><span class="n">Out</span><span class="p">]</span> <span class="cm">/*tagLOGPALETTE*/</span> <span class="n">IntPtr</span> <span class="n">ppColorSet</span> <span class="p">);</span></div><div class='line' id='LC22'><br/></div><div class='line' id='LC23'><span class="na">        [PreserveSig]</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="nf">Freeze</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">dwDrawAspect</span><span class="p">,</span> <span class="kt">int</span> <span class="n">lindex</span><span class="p">,</span> <span class="n">IntPtr</span> <span class="n">pvAspect</span><span class="p">,</span> <span class="p">[</span><span class="n">Out</span><span class="p">]</span> <span class="n">IntPtr</span> <span class="n">pdwFreeze</span> <span class="p">);</span></div><div class='line' id='LC25'><br/></div><div class='line' id='LC26'><span class="na">        [PreserveSig]</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="nf">Unfreeze</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">dwFreeze</span> <span class="p">);</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">void</span> <span class="nf">SetAdvise</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">aspects</span><span class="p">,</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">U4</span> <span class="p">)]</span> <span class="kt">int</span> <span class="n">advf</span><span class="p">,</span></div><div class='line' id='LC30'><span class="na">                        [In]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">Interface</span> <span class="p">)]</span> <span class="cm">/*IAdviseSink*/</span> <span class="n">IntPtr</span> <span class="n">pAdvSink</span> <span class="p">);</span></div><div class='line' id='LC31'><br/></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">void</span> <span class="nf">GetAdvise</span><span class="p">(</span> <span class="p">[</span><span class="n">In</span><span class="p">]</span> <span class="p">[</span><span class="n">Out</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">LPArray</span> <span class="p">)]</span> <span class="kt">int</span><span class="p">[]</span> <span class="n">paspects</span><span class="p">,</span></div><div class='line' id='LC33'><span class="na">                        [In]</span> <span class="p">[</span><span class="n">Out</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">LPArray</span> <span class="p">)]</span> <span class="kt">int</span><span class="p">[]</span> <span class="n">advf</span><span class="p">,</span></div><div class='line' id='LC34'><span class="na">                        [In]</span> <span class="p">[</span><span class="n">Out</span><span class="p">]</span> <span class="p">[</span><span class="n">MarshalAs</span><span class="p">(</span> <span class="n">UnmanagedType</span><span class="p">.</span><span class="n">LPArray</span> <span class="p">)]</span> <span class="cm">/*IAdviseSink[]*/</span> <span class="n">IntPtr</span><span class="p">[]</span> <span class="n">pAdvSink</span> <span class="p">);</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">static</span> <span class="n">Bitmap</span> <span class="nf">Create</span><span class="p">(</span> <span class="kt">string</span> <span class="n">url</span> <span class="p">)</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">using</span><span class="p">(</span> <span class="n">var</span> <span class="n">webBrowser</span> <span class="p">=</span> <span class="k">new</span> <span class="n">WebBrowser</span><span class="p">()</span> <span class="p">)</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">webBrowser</span><span class="p">.</span><span class="n">ScrollBarsEnabled</span> <span class="p">=</span> <span class="k">false</span><span class="p">;</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">webBrowser</span><span class="p">.</span><span class="n">ScriptErrorsSuppressed</span> <span class="p">=</span> <span class="k">true</span><span class="p">;</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">webBrowser</span><span class="p">.</span><span class="n">Navigate</span><span class="p">(</span> <span class="n">url</span> <span class="p">);</span></div><div class='line' id='LC44'><br/></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">while</span><span class="p">(</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">ReadyState</span> <span class="p">!=</span> <span class="n">WebBrowserReadyState</span><span class="p">.</span><span class="n">Complete</span> <span class="p">)</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Application</span><span class="p">.</span><span class="n">DoEvents</span><span class="p">();</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC49'><br/></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">webBrowser</span><span class="p">.</span><span class="n">Width</span> <span class="p">=</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Document</span><span class="p">.</span><span class="n">Body</span><span class="p">.</span><span class="n">ScrollRectangle</span><span class="p">.</span><span class="n">Width</span><span class="p">;</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">webBrowser</span><span class="p">.</span><span class="n">Height</span> <span class="p">=</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Document</span><span class="p">.</span><span class="n">Body</span><span class="p">.</span><span class="n">ScrollRectangle</span><span class="p">.</span><span class="n">Height</span><span class="p">;</span></div><div class='line' id='LC52'><br/></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">bitmap</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Bitmap</span><span class="p">(</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Width</span><span class="p">,</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Height</span> <span class="p">);</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">graphics</span> <span class="p">=</span> <span class="n">Graphics</span><span class="p">.</span><span class="n">FromImage</span><span class="p">(</span> <span class="n">bitmap</span> <span class="p">);</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">hdc</span> <span class="p">=</span> <span class="n">graphics</span><span class="p">.</span><span class="n">GetHdc</span><span class="p">();</span></div><div class='line' id='LC56'><br/></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">rect</span> <span class="p">=</span> <span class="k">new</span> <span class="n">Rectangle</span><span class="p">(</span> <span class="m">0</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Width</span><span class="p">,</span> <span class="n">webBrowser</span><span class="p">.</span><span class="n">Height</span> <span class="p">);</span></div><div class='line' id='LC58'><br/></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">viewObject</span> <span class="p">=</span> <span class="p">(</span><span class="n">IViewObject</span><span class="p">)</span><span class="n">webBrowser</span><span class="p">.</span><span class="n">Document</span><span class="p">.</span><span class="n">DomDocument</span><span class="p">;</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">viewObject</span><span class="p">.</span><span class="n">Draw</span><span class="p">(</span> <span class="m">1</span><span class="p">,</span> <span class="p">-</span><span class="m">1</span><span class="p">,</span> <span class="p">(</span><span class="n">IntPtr</span><span class="p">)</span><span class="m">0</span><span class="p">,</span> <span class="p">(</span><span class="n">IntPtr</span><span class="p">)</span><span class="m">0</span><span class="p">,</span> <span class="p">(</span><span class="n">IntPtr</span><span class="p">)</span><span class="m">0</span><span class="p">,</span> <span class="n">hdc</span><span class="p">,</span> <span class="n">rect</span><span class="p">,</span> <span class="p">(</span><span class="n">IntPtr</span><span class="p">)</span><span class="m">0</span><span class="p">,</span> <span class="p">(</span><span class="n">IntPtr</span><span class="p">)</span><span class="m">0</span><span class="p">,</span> <span class="m">0</span> <span class="p">);</span></div><div class='line' id='LC61'><br/></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">graphics</span><span class="p">.</span><span class="n">ReleaseHdc</span><span class="p">(</span> <span class="n">hdc</span> <span class="p">);</span></div><div class='line' id='LC63'><br/></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">bitmap</span><span class="p">;</span></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC67'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366260/801fe5ae191650fabd8cbd341b3b951ecaeccdf7/ScreenShot.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366260#file_screen_shot.cs" style="float:right;margin-right:10px;color:#666">ScreenShot.cs</a>
            <a href="https://gist.github.com/1366260">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>From here, it’s pretty simple to start adding features like min/max width/height, a capture delay for pages that have Flash on them, etc.</p>
<p><strong>Note:</strong> For Flash to work properly, you need to set the project type to x86. If running on a 64-bit system and the project is set to “Any CPU”, Flash won’t work because it’s not compatible with 64-bit systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/09/programmatically-taking-a-full-web-page-screenshot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamically Loading Partial Views with the Spark View Engine</title>
		<link>http://www.joshclose.net/2009/09/dynamically-loading-partial-views-with-the-spark-view-engine/</link>
		<comments>http://www.joshclose.net/2009/09/dynamically-loading-partial-views-with-the-spark-view-engine/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 05:40:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Spark View Engine]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=51</guid>
		<description><![CDATA[Loading a partial view is easy with Spark. There are basically two ways: And if you have name your files using the _MyPartialView.spark convention: Now what if you don’t know the name of the partial file until runtime and need to dynamically render the view? As far as I know, there is no way of [...]]]></description>
			<content:encoded><![CDATA[<p>Loading a partial view is easy with Spark. There are basically two ways:</p>
<div id="gist-1366268" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;use</span> <span class="na">file=</span><span class="s">&quot;MyPartialView&quot;</span> <span class="nt">/&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366268/14ef71cee9b0f05a2db963a769d0d454d09ace0a/File1.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366268#file_file1.xml" style="float:right;margin-right:10px;color:#666">File1.xml</a>
            <a href="https://gist.github.com/1366268">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>And if you have name your files using the _MyPartialView.spark convention:</p>
<div id="gist-1366268" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;MyPartialView</span> <span class="nt">/&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366268/39f10a1d0310bc54b700705cfcc7cd6481b3114f/File2.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366268#file_file2.xml" style="float:right;margin-right:10px;color:#666">File2.xml</a>
            <a href="https://gist.github.com/1366268">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Now what if you don’t know the name of the partial file until runtime and need to dynamically render the view? As far as I know, there is no way of doing this in Spark. How you can get around this is by doing some inline code using ASP.NET MVCs RenderPartial method.</p>
<div id="gist-1366268" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="err">#</span><span class="n">Html</span><span class="p">.</span><span class="n">RenderPartial</span><span class="p">(</span> <span class="n">myPartialViewVariable</span> <span class="p">);</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366268/2d5d93ab58f0ea191c68d26e43620cf3485fcdd7/File3.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366268#file_file3.cs" style="float:right;margin-right:10px;color:#666">File3.cs</a>
            <a href="https://gist.github.com/1366268">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>This is assuming myPartialViewVariable is a string variable with the name of the view that needs to be rendered.</p>
<p><strong>Update:</strong></p>
<p>When you use ASP.NET’s Html.RenderPartial, your data isn’t automatically passed along to the spark view. To pass your data along, use the ViewData dictionary, like you would in a controller.</p>
<div id="gist-1366268" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;ul&gt;</span></div><div class='line' id='LC2'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;li</span> <span class="na">each=</span><span class="s">&quot;var item in items&quot;</span><span class="nt">&gt;</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#ViewData[&quot;item&quot;] = item;</div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Html.RenderPartial( &quot;path/to/&quot; + item.Name );</div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nt">&lt;/li&gt;</span></div><div class='line' id='LC6'><span class="nt">&lt;/ul&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366268/2799f4964bae134ecdeba1b88dfe3494692af502/File4.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366268#file_file4.xml" style="float:right;margin-right:10px;color:#666">File4.xml</a>
            <a href="https://gist.github.com/1366268">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>In the partial view, use the &lt;viewdata /&gt; spark attribute like you normally would in a spark file.</p>
<div id="gist-1366268" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="nt">&lt;viewdata</span> <span class="na">item=</span><span class="s">&quot;Item&quot;</span> <span class="nt">/&gt;</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1366268/841accf1b69c2caed70aa846bfdc50de6aae0f3f/File5.xml" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1366268#file_file5.xml" style="float:right;margin-right:10px;color:#666">File5.xml</a>
            <a href="https://gist.github.com/1366268">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/09/dynamically-loading-partial-views-with-the-spark-view-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FireFox is Slow When Using Visual Studios ASP.NET Development Server (Cassini)</title>
		<link>http://www.joshclose.net/2009/08/firefox-is-slow-when-using-visual-studios-asp-net-development-server-cassini/</link>
		<comments>http://www.joshclose.net/2009/08/firefox-is-slow-when-using-visual-studios-asp-net-development-server-cassini/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 05:46:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Cassini]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=53</guid>
		<description><![CDATA[If you’re ever running a web app locally in Cassini (Visual Studios built in web server) and FireFox is really really really slow, but IE is fast like it should be, then you probably need to turn off IPV6 in FireFox. To do this, type “about:config” in the address bar and filter on “v6″. Turn [...]]]></description>
			<content:encoded><![CDATA[<p>If you’re ever running a web app locally in Cassini (Visual Studios built in web server) and FireFox is really really really slow, but IE is fast like it should be, then you probably need to turn off IPV6 in FireFox.</p>
<p>To do this, type “about:config” in the address bar and filter on “v6″. Turn off IPV6 and FireFox should be fast again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/08/firefox-is-slow-when-using-visual-studios-asp-net-development-server-cassini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Magic Maintenance Mode</title>
		<link>http://www.joshclose.net/2009/08/asp-net-magic-maintenance-mode/</link>
		<comments>http://www.joshclose.net/2009/08/asp-net-magic-maintenance-mode/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 05:52:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=55</guid>
		<description><![CDATA[I just recently found that you’re able to easily put your ASP.NET website int “maintenance mode”. All you need to do is add an App_Offline.htm file to you site root, and ASP.NET will serve up all requests to that file. Just rename or remove the file when you’re down with your maintenance. Scott Gu has [...]]]></description>
			<content:encoded><![CDATA[<p>I just recently found that you’re able to easily put your ASP.NET website int “maintenance mode”. All you need to do is add an App_Offline.htm file to you site root, and ASP.NET will serve up all requests to that file. Just rename or remove the file when you’re down with your maintenance.</p>
<p>Scott Gu has a couple good posts on this.</p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx">http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx</a></p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx">http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/08/asp-net-magic-maintenance-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC, Ninject.Web.Mvc and 404’s</title>
		<link>http://www.joshclose.net/2009/08/asp-net-mvc-ninject-web-mvc-and-404%e2%80%99s/</link>
		<comments>http://www.joshclose.net/2009/08/asp-net-mvc-ninject-web-mvc-and-404%e2%80%99s/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 15:03:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Ninject]]></category>

		<guid isPermaLink="false">http://www.joshclose.net/?p=58</guid>
		<description><![CDATA[I went about trying to handle 404 errors on my ASP.NET MVC application by following code I found here. Although, this didn’t work for me because I’m using Ninject.Web.Mvc. Instead, I get this error: The IControllerFactory ‘Ninject.Web.Mvc.NinjectControllerFactory’ did not return a controller for a controller named ‘blah’. The NinjectControllerFactory.CreateController( RequestContext requestContext, string controllerName ) method is [...]]]></description>
			<content:encoded><![CDATA[<p>I went about trying to handle 404 errors on my ASP.NET MVC application by following code I found <a href="http://stackoverflow.com/questions/619895/how-can-i-properly-handle-404s-in-asp-net-mvc" target="_blank">here</a>.</p>
<div id="gist-1367272" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">protected</span> <span class="k">void</span> <span class="nf">Application_Error</span><span class="p">(</span> <span class="kt">object</span> <span class="n">sender</span><span class="p">,</span> <span class="n">EventArgs</span> <span class="n">e</span> <span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">exception</span> <span class="p">=</span> <span class="n">Server</span><span class="p">.</span><span class="n">GetLastError</span><span class="p">();</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Response</span><span class="p">.</span><span class="n">Clear</span><span class="p">();</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">httpException</span> <span class="p">=</span> <span class="n">exception</span> <span class="k">as</span> <span class="n">HttpException</span><span class="p">;</span></div><div class='line' id='LC8'><br/></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">routeData</span> <span class="p">=</span> <span class="k">new</span> <span class="n">RouteData</span><span class="p">();</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;controller&quot;</span><span class="p">,</span> <span class="s">&quot;Error&quot;</span> <span class="p">);</span></div><div class='line' id='LC11'><br/></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span> <span class="n">httpException</span> <span class="p">==</span> <span class="k">null</span> <span class="p">)</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;Index&quot;</span> <span class="p">);</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">else</span> <span class="c1">//It&#39;s an Http Exception, Let&#39;s handle it.</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">switch</span><span class="p">(</span> <span class="n">httpException</span><span class="p">.</span><span class="n">GetHttpCode</span><span class="p">()</span> <span class="p">)</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="m">404</span><span class="p">:</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Page not found.</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;HttpError404&quot;</span> <span class="p">);</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">case</span> <span class="m">500</span><span class="p">:</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Server error.</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;HttpError500&quot;</span> <span class="p">);</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC28'><br/></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Here you can handle Views to other error codes.</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// I choose a General error template</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">default</span><span class="p">:</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;action&quot;</span><span class="p">,</span> <span class="s">&quot;General&quot;</span> <span class="p">);</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC36'><br/></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Pass exception details to the target error View.</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">routeData</span><span class="p">.</span><span class="n">Values</span><span class="p">.</span><span class="n">Add</span><span class="p">(</span> <span class="s">&quot;error&quot;</span><span class="p">,</span> <span class="n">exception</span> <span class="p">);</span></div><div class='line' id='LC39'><br/></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Clear the error on server.</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Server</span><span class="p">.</span><span class="n">ClearError</span><span class="p">();</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Call target Controller and pass the routeData.</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">IController</span> <span class="n">errorController</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ErrorController</span><span class="p">();</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">errorController</span><span class="p">.</span><span class="n">Execute</span><span class="p">(</span> <span class="k">new</span> <span class="n">RequestContext</span><span class="p">(</span> <span class="k">new</span> <span class="n">HttpContextWrapper</span><span class="p">(</span> <span class="n">Context</span> <span class="p">),</span> <span class="n">routeData</span> <span class="p">)</span> <span class="p">);</span></div><div class='line' id='LC46'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1367272/2f6875b7a87810528d100d8963d43c94a1dc30fc/File1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1367272#file_file1.cs" style="float:right;margin-right:10px;color:#666">File1.cs</a>
            <a href="https://gist.github.com/1367272">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>Although, this didn’t work for me because I’m using Ninject.Web.Mvc. Instead, I get this error:</p>
<p><em>The IControllerFactory ‘Ninject.Web.Mvc.NinjectControllerFactory’ did not return a controller for a controller named ‘blah’.</em></p>
<p>The NinjectControllerFactory.CreateController( RequestContext requestContext, string controllerName ) method is returning null when it can’t find a controller, when it should be throwing a 404 HttpException.</p>
<p>There apparently is a patch waiting to be merged into trunk for this, but until then, you can use this change to the controller factory. The factory now inherits from DefaultControllerFactory, CreateController and ReleaseController are now overrides, and a test for a null controller will call base.CreateController.</p>
<div id="gist-1367272" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC2'><span class="k">using</span> <span class="nn">System.Globalization</span><span class="p">;</span></div><div class='line' id='LC3'><span class="k">using</span> <span class="nn">System.Web</span><span class="p">;</span></div><div class='line' id='LC4'><span class="k">using</span> <span class="nn">System.Web.Mvc</span><span class="p">;</span></div><div class='line' id='LC5'><span class="k">using</span> <span class="nn">System.Web.Routing</span><span class="p">;</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="k">namespace</span> <span class="nn">Ninject.Web.Mvc</span></div><div class='line' id='LC8'><span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;summary&gt;</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// A controller factory that creates &lt;see cref=&quot;IController&quot;/&gt;s via Ninject.</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;/summary&gt;</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">NinjectControllerFactory</span> <span class="p">:</span> <span class="n">DefaultControllerFactory</span></div><div class='line' id='LC13'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;summary&gt;</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// Gets the kernel that will be used to create controllers.</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;/summary&gt;</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">IKernel</span> <span class="n">Kernel</span> <span class="p">{</span> <span class="k">get</span><span class="p">;</span> <span class="k">private</span> <span class="k">set</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC18'><br/></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;summary&gt;</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// Initializes a new instance of the &lt;see cref=&quot;NinjectControllerFactory&quot;/&gt; class.</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;/summary&gt;</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;param name=&quot;kernel&quot;&gt;The kernel that should be used to create controllers.&lt;/param&gt;</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="nf">NinjectControllerFactory</span><span class="p">(</span><span class="n">IKernel</span> <span class="n">kernel</span><span class="p">)</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Kernel</span> <span class="p">=</span> <span class="n">kernel</span><span class="p">;</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC27'><br/></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;summary&gt;</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// Creates the controller with the specified name.</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;/summary&gt;</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;param name=&quot;requestContext&quot;&gt;The request context.&lt;/param&gt;</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;param name=&quot;controllerName&quot;&gt;Name of the controller.&lt;/param&gt;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;returns&gt;The created controller.&lt;/returns&gt;</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">override</span> <span class="n">IController</span> <span class="nf">CreateController</span><span class="p">(</span><span class="n">RequestContext</span> <span class="n">requestContext</span><span class="p">,</span> <span class="kt">string</span> <span class="n">controllerName</span><span class="p">)</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">controller</span> <span class="p">=</span> <span class="n">Kernel</span><span class="p">.</span><span class="n">TryGet</span><span class="p">&lt;</span><span class="n">IController</span><span class="p">&gt;(</span><span class="n">controllerName</span><span class="p">.</span><span class="n">ToLowerInvariant</span><span class="p">());</span></div><div class='line' id='LC37'><br/></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">controller</span> <span class="p">==</span> <span class="k">null</span><span class="p">)</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">base</span><span class="p">.</span><span class="n">CreateController</span><span class="p">(</span><span class="n">requestContext</span><span class="p">,</span> <span class="n">controllerName</span><span class="p">);</span></div><div class='line' id='LC40'><br/></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">standardController</span> <span class="p">=</span> <span class="n">controller</span> <span class="k">as</span> <span class="n">Controller</span><span class="p">;</span></div><div class='line' id='LC42'><br/></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span><span class="p">(</span><span class="n">standardController</span> <span class="p">!=</span> <span class="k">null</span><span class="p">)</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">standardController</span><span class="p">.</span><span class="n">ActionInvoker</span> <span class="p">=</span> <span class="k">new</span> <span class="n">NinjectActionInvoker</span><span class="p">(</span><span class="n">Kernel</span><span class="p">);</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">controller</span><span class="p">;</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC48'><br/></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;summary&gt;</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// Releases the specified controller.</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;/summary&gt;</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">/// &lt;param name=&quot;controller&quot;&gt;The controller to release.&lt;/param&gt;</span></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">override</span> <span class="k">void</span> <span class="nf">ReleaseController</span><span class="p">(</span><span class="n">IController</span> <span class="n">controller</span><span class="p">)</span> <span class="p">{</span> <span class="p">}</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC55'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1367272/c090abc2958a56816433cb97f9f4e21978894b56/File2.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1367272#file_file2.cs" style="float:right;margin-right:10px;color:#666">File2.cs</a>
            <a href="https://gist.github.com/1367272">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.joshclose.net/2009/08/asp-net-mvc-ninject-web-mvc-and-404%e2%80%99s/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

