<?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>Esencia Development</title>
	<atom:link href="http://www.esenciadev.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.esenciadev.com</link>
	<description>thoughts and solutions from software craftsmen</description>
	<lastBuildDate>Tue, 11 May 2010 17:21:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Dependency Injected Action Filters in ASP.NET MVC2</title>
		<link>http://www.esenciadev.com/2010/05/dependency-injected-action-filters-in-asp-net-mvc2/</link>
		<comments>http://www.esenciadev.com/2010/05/dependency-injected-action-filters-in-asp-net-mvc2/#comments</comments>
		<pubDate>Thu, 06 May 2010 18:25:01 +0000</pubDate>
		<dc:creator>ryan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[ASP.NET MVC2]]></category>
		<category><![CDATA[DI]]></category>

		<guid isPermaLink="false">http://www.esenciadev.com/?p=93</guid>
		<description><![CDATA[On one of our current projects utilizing all the latest Microsoft has to offer (MVC2, EF4, Unity, .NET 4) we found ourselves creating a number of Action Filters for encapsulating often used behavior, such as Auditing, Authorization, and temp data management. Action filters are an incredibly powerful tool in MVC, capable of manipulating any piece [...]]]></description>
			<content:encoded><![CDATA[<p>On one of our current projects utilizing all the latest Microsoft has to offer (MVC2, EF4, Unity, .NET 4) we found ourselves creating a number of <a title="Action Filters" href="http://msdn.microsoft.com/en-us/library/dd410056(VS.90).aspx" target="_blank">Action Filters</a> for encapsulating often used behavior, such as Auditing, Authorization, and temp data management. Action filters are an incredibly powerful tool in MVC, capable of manipulating any piece of the request/response and making that behavior easy to reuse. The problem with Action Filters, on the surface, is that there is no immediately apparent method of injecting dependencies into those filters &#8211; they&#8217;re just attributes on a method in your controller, or on the class of the controller itself, such as below:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>Authorized<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> WidgetController <span style="color: #008000;">:</span> MyControllerBase
<span style="color: #000000;">&#123;</span>
 <span style="color: #000000;">&#91;</span>Audit<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Doing something&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
 <span style="color: #0600FF;">public</span> ActionResult DoSomething<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
 <span style="color: #000000;">&#123;</span>
 ...
 <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>In the case where your attribute has dependencies that should be resolved by your DI container, you may find yourself manually resolving those dependencies every time, which can get tedious and error prone. The answer to this lies in the Controller, but first we need a little background on how the Action Filters are actually executed.</p>
<p>When the MVC routing system finds the Controller for the current request, it uses an instance of that controller create to an ActionInvoker, which will be used in executing the action(s) on the controller. This <a title="ControllerActionInvoker" href="http://aspnet.codeplex.com/sourcecontrol/network/Show?projectName=aspnet&amp;changeSetId=23011#266452" target="_blank">ControllerActionInvoker</a> is responsible for finding the appropriate action given the route on that controller, as well as invoking the action AND the actions filters. Since the ControllerActionInvoker is responsible for actually creating instances of the Filters, it&#8217;s the ideal location to put code responsible for building up the dependencies of any Filters on your action methods. With a minimal amount of code, we should be able to usurp the ActionFilter creation process and inject our dependencies before the filter executes.</p>
<p>First, we&#8217;ll need a DI wrapper. The one below is a snippet from mine which acts as a shell around Unity:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #FF0000;">class</span> ServiceResolver
<span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> T InjectDependencies<span style="color: #000000;">&#40;</span>T instance<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #000000;">&#40;</span>T<span style="color: #000000;">&#41;</span>_container.<span style="color: #0000FF;">BuildUp</span><span style="color: #000000;">&#40;</span>instance.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, instance<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
 ...
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now, the custom action invoker, which for these purposes only needs to override GetFilters(&#8230;), since this is the method responsible for getting the filters on a given Action:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> MyActionInvoker <span style="color: #008000;">:</span> ControllerActionInvoker
<span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> FilterInfo GetFilters<span style="color: #000000;">&#40;</span>ControllerContext controllerContext, 
            ActionDescriptor actionDescriptor<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            var filters <span style="color: #008000;">=</span> <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">GetFilters</span><span style="color: #000000;">&#40;</span>controllerContext, actionDescriptor<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
            filters.<span style="color: #0000FF;">ActionFilters</span>.<span style="color: #0600FF;">ForEach</span><span style="color: #000000;">&#40;</span>
               f <span style="color: #008000;">=&gt;</span> ServiceResolver.<span style="color: #0000FF;">InjectDependencies</span><span style="color: #000000;">&#40;</span>f<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            filters.<span style="color: #0000FF;">AuthorizationFilters</span>.<span style="color: #0600FF;">ForEach</span><span style="color: #000000;">&#40;</span>
               f <span style="color: #008000;">=&gt;</span> ServiceResolver.<span style="color: #0000FF;">InjectDependencies</span><span style="color: #000000;">&#40;</span>f<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            filters.<span style="color: #0000FF;">ExceptionFilters</span>.<span style="color: #0600FF;">ForEach</span><span style="color: #000000;">&#40;</span>
               f <span style="color: #008000;">=&gt;</span> ServiceResolver.<span style="color: #0000FF;">InjectDependencies</span><span style="color: #000000;">&#40;</span>f<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            filters.<span style="color: #0000FF;">ResultFilters</span>.<span style="color: #0600FF;">ForEach</span><span style="color: #000000;">&#40;</span>
               f <span style="color: #008000;">=&gt;</span> ServiceResolver.<span style="color: #0000FF;">InjectDependencies</span><span style="color: #000000;">&#40;</span>f<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> filters<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Note that we iterate over all the different filter collections that are returned as a result of the call to base.GetFilters(&#8230;). This ensures that any filters we create for any part of the action process will have dependencies resolved. Now you need to make sure your custom ActionInvoker is used any time MVC is trying to invoke an action on your controllers, so you&#8217;ll need a common base Controller class that <strong>all</strong> of your controllers will inherit from.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> MyControllerBase <span style="color: #008000;">:</span> Controller
<span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> IActionInvoker CreateActionInvoker<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">return</span> <span style="color: #008000;">new</span> MyActionInvoker<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now any ActionFilters which have property-based dependencies will be automatically fulfilled by the new ActionInvoker, such as the AuditAttribute show below:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> AuditAttribute <span style="color: #008000;">:</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span></span>.<span style="color: #0000FF;">Mvc</span>.<span style="color: #0000FF;">ActionFilterAttribute</span>
<span style="color: #000000;">&#123;</span>
        <span style="color: #000000;">&#91;</span>Dependency<span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> IUserRepository UserRepository <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#91;</span>Dependency<span style="color: #000000;">&#93;</span>
        <span style="color: #0600FF;">public</span> ILogger Logger <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
...
<span style="color: #000000;">&#125;</span></pre></div></div>

<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F&amp;title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F&amp;title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F&amp;title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F&amp;headline=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;u=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F&amp;title=Dependency+Injected+Action+Filters+in+ASP.NET+MVC2&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F05%2Fdependency-injected-action-filters-in-asp-net-mvc2%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.esenciadev.com/2010/05/dependency-injected-action-filters-in-asp-net-mvc2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MVC2 Areas, T4MVC and sharing actions</title>
		<link>http://www.esenciadev.com/2010/04/mvc2-areas-t4-and-sharing-actions/</link>
		<comments>http://www.esenciadev.com/2010/04/mvc2-areas-t4-and-sharing-actions/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 22:38:17 +0000</pubDate>
		<dc:creator>cody</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[ASP.NET MVC2]]></category>

		<guid isPermaLink="false">http://www.esenciadev.com/?p=73</guid>
		<description><![CDATA[Using T4MVC: T4 templates to rid your MVC2 application of “magic strings”, strings representing action, controller and view names, can be extremely useful in making your code much more stable. It can help eliminate run-time errors and instead will generate compile errors notifying you that you have a reference to an action or view that [...]]]></description>
			<content:encoded><![CDATA[<p>Using <a title="T4MVC: a T4 template for ASP.NET VMC" href="http://mvccontrib.codeplex.com/wikipage?title=T4MVC" target="_blank">T4MVC: T4 templates</a> to rid your MVC2 application of “magic strings”, strings representing action, controller and view names, can be extremely useful in making your code much more stable.  It can help eliminate run-time errors and instead will generate compile errors notifying you that you have a reference to an action or view that doesn’t exist. Allowing you to do the following:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>HttpGet<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> ActionResult LogOn<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span>Views.<span style="color: #0000FF;">LogOn</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>As opposed to:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>HttpGet<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> ActionResult LogOn<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;LogOn&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>This post is not going into T4 templates, if you are not familiar with them check out <a title="Code Generation and Text Templates on Microsoft" href="http://msdn.microsoft.com/en-us/library/bb126445.aspx" target="_blank">Code Generation and Text Templates</a> for an overview.  Using them can present some challenges though and one of those is what I will be addressing in this post.</p>
<h3>The Challenge</h3>
<p>If you are using areas in your MVC application and you have functionality that crosses those boundaries, T4 templating causes issues when that logic needs to display views or redirect to actions for each area.</p>
<p>The easy solution is to have a controller that encapsulates the logic that both areas use but then you have to resort to magic strings and this could result in run-time errors if a view or action is moved or renamed later.</p>
<h3>The Solution</h3>
<p>What we did was simply use an abstract base controller that resides in the main controller folder of the project and created derived classes in the respective areas.  The base class is where all the common logic exists and the derived classes implement the desired logic and displays the area specific views.</p>
<p>For example:<br />
(In base class)</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> abstract ActionResult Index<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>(In derived class1)</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>HttpGet<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> ActionResult Index<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span>MVC.<span style="color: #0000FF;">MainArea</span>.<span style="color: #0000FF;">Home</span>.<span style="color: #0000FF;">Views</span>.<span style="color: #0000FF;">Index</span>, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>(In derived class2)</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>HttpGet<span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> ActionResult Index<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span>MVC.<span style="color: #0000FF;">OtherArea</span>.<span style="color: #0000FF;">Home</span>.<span style="color: #0000FF;">Views</span>.<span style="color: #0000FF;">Index</span>, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>This allows the application to use the T4 templates and still generate compile time errors if someone changes any views or actions referenced in the derived controllers.</p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F&amp;title=MVC2+Areas%2C+T4MVC+and+sharing+actions" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F&amp;title=MVC2+Areas%2C+T4MVC+and+sharing+actions" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F&amp;title=MVC2+Areas%2C+T4MVC+and+sharing+actions" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F&amp;headline=MVC2+Areas%2C+T4MVC+and+sharing+actions" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;u=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F&amp;title=MVC2+Areas%2C+T4MVC+and+sharing+actions&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fwww.esenciadev.com%2F2010%2F04%2Fmvc2-areas-t4-and-sharing-actions%2F" ><img class="lightsocial_img" src="http://www.esenciadev.com/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.esenciadev.com/2010/04/mvc2-areas-t4-and-sharing-actions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
