<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Shiju Varghese's Blog</title><link>http://weblogs.asp.net/shijuvarghese/default.aspx</link><description>A .Net Ninja on  ASP.NET MVC, TDD and Architecture.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ShijuVBlog" type="application/rss+xml" /><feedburner:emailServiceId>ShijuVBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>ASP.NET MVC 2 Preview 1 Released</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/V5hlL0c0TS8/asp-net-mvc-2-preview-1-released.aspx</link><pubDate>Fri, 31 Jul 2009 08:46:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7158588</guid><dc:creator>shiju</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=7158588</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=7158588</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/07/31/asp-net-mvc-2-preview-1-released.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;Microsoft has released Preview 1 version of ASP.NET MVC 2. You can download&amp;nbsp; ASP.NET MVC 2 Preview 1 from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d34f9eaa-fcbe-4e20-b2fd-a9a03de7d6dd&amp;amp;displaylang=en" target="_blank" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d34f9eaa-fcbe-4e20-b2fd-a9a03de7d6dd&amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&amp;nbsp; The new features are Templated Helpers, Areas and Support for Data Annotations. For more details visit the following links&lt;/p&gt;&lt;p&gt;ScottGu on &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx" target="_blank" mce_href="http://weblogs.asp.net/scottgu/archive/2009/07/31/asp-net-mvc-v2-preview-1-released.aspx"&gt;ASP.NET MVC V2 Preview 1 Released&amp;nbsp; &lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Phil Haack on &lt;a href="http://haacked.com/archive/2009/07/30/asp.net-mvc-released.aspx" target="_blank" mce_href="http://haacked.com/archive/2009/07/30/asp.net-mvc-released.aspx"&gt;ASP.NET MVC 2 Preview 1 Released &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee308450%28VS.100%29.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/ee308450%28VS.100%29.aspx"&gt;Walkthrough: Using Templated Helpers to Display Data &lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee307987%28VS.100%29.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/ee307987%28VS.100%29.aspx"&gt;&amp;nbsp;Walkthrough: Organizing an ASP.NET MVC Application by Logical Areas&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee256141%28VS.100%29.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/ee256141%28VS.100%29.aspx"&gt;How to: Validate Model Data Using DataAnnotations Attributes &lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7158588" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/V5hlL0c0TS8" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/07/31/asp-net-mvc-2-preview-1-released.aspx</feedburner:origLink></item><item><title>Introduction to Test-Driven Development with ASP.NET MVC</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/tS1KPG8CDwc/introduction-to-test-driven-development-with-asp-net-mvc.aspx</link><pubDate>Wed, 22 Jul 2009 16:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7152855</guid><dc:creator>shiju</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=7152855</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=7152855</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/07/22/introduction-to-test-driven-development-with-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;One of the greatest advantages of ASP.NET MVC is the support of testability, which enables to Test-Driven Development (TDD) in an easy manner. A testable application should be developed in a loosely coupled manner so that you can test the independent parts of the application. For developing testable applications, the support of developer frameworks is very important and the frameworks should be designed to facilitate building testable applications. One of the design goals of ASP.NET MVC was testability so that you can easily develop testable application with the ASP.NET MVC framework. In this post, I will give an introduction to Test-Driven Development (TDD) with ASP.NET MVC using NUnit unit test framework. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Introduction to Test-Driven Development&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;TDD is a design approach that follows a Test First development where you write a test before you write just enough production code to fulfill that test and refactoring. The TDD model development is also known as Red-Green-Refactor style development. &lt;/p&gt;  &lt;p&gt;The following are the workflow of TDD &lt;/p&gt;  &lt;p&gt;1. Requirement identified &lt;/p&gt;  &lt;p&gt;2. Write an automated test &lt;/p&gt;  &lt;p&gt;3. Run tests and make sure new one FAILS (RED) &lt;/p&gt;  &lt;p&gt;4. Write some code &lt;/p&gt;  &lt;p&gt;5. Run tests to make sure all PASS (GREEN) &lt;/p&gt;  &lt;p&gt;6. Refactor &lt;/p&gt;  &lt;p&gt;7. Repeat &lt;/p&gt;  &lt;p&gt;In this example, I will explain a scenario where users can view list of categories and also able to add new category into the application. The following are the behaviors of our simple reference application &lt;/p&gt;  &lt;p&gt;1. Users should be able to view list of Categories &lt;/p&gt;  &lt;p&gt;2. The category list should support paging &lt;/p&gt;  &lt;p&gt;3. The Category Name should be mandatory while creating a new Category &lt;/p&gt;  &lt;p&gt;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;Code listings of the application &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Category model&lt;/b&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;{&lt;br&gt;      &lt;span style="color: blue;"&gt;public int &lt;/span&gt;CategoryID { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;br&gt;      &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;br&gt;      &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Description { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }      &lt;br&gt;  }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;ICategoryRepository&lt;/b&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue;"&gt;public interface &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository &lt;/span&gt;{&lt;br&gt;       &lt;span style="color: rgb(43, 145, 175);"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt; GetCategories();&lt;br&gt;       &lt;span style="color: blue;"&gt;void &lt;/span&gt;Save(&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;category);&lt;br&gt;       &lt;span style="color: blue;"&gt;void &lt;/span&gt;Delete(&lt;span style="color: blue;"&gt;int &lt;/span&gt;id);&lt;br&gt;       &lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;Read(&lt;span style="color: blue;"&gt;int &lt;/span&gt;id);&lt;br&gt;   }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;ICategoryService&lt;/b&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue;"&gt;public interface &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryService &lt;/span&gt;{&lt;br&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt; GetCategories();&lt;br&gt;        &lt;span style="color: blue;"&gt;void &lt;/span&gt;Save(&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;category);&lt;br&gt;        &lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;Read(&lt;span style="color: blue;"&gt;int &lt;/span&gt;id);&lt;br&gt;        &lt;span style="color: blue;"&gt;void &lt;/span&gt;Delete(&lt;span style="color: blue;"&gt;int &lt;/span&gt;id);&lt;br&gt;    }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;CategoryController - List Action&lt;/b&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ActionResult &lt;/span&gt;List(&lt;span style="color: blue;"&gt;int&lt;/span&gt;? page)&lt;br&gt; {&lt;br&gt;      &lt;span style="color: blue;"&gt;return &lt;/span&gt;View();&lt;br&gt;  }&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Currently the List action method does not contain any implmentation logic. We will write the implementation code after writing a failure test.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Unit Tests&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In TDD, we start with writing a failure test. In this post, I am using NUnit for unit test. You can download NUnit from &lt;a href="http://nunit.org/" mce_href="http://nunit.org/"&gt;http://NUnit.org&lt;/a&gt;. If you want a NUnit test template for ASP.NET MVC, check the blog post &lt;a href="http://blogs.msdn.com/webdevtools/archive/2009/04/28/updated-nunit-templates-for-asp-net-mvc-1-0-rtm.aspx" mce_href="http://blogs.msdn.com/webdevtools/archive/2009/04/28/updated-nunit-templates-for-asp-net-mvc-1-0-rtm.aspx"&gt;Updated NUnit Templates for ASP.Net MVC 1.0 RTM&lt;/a&gt; . &lt;/p&gt;

&lt;p&gt;The below is the test for the behaviours of the category list&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;TestFixture&lt;/span&gt;]&lt;br&gt;&lt;span style="color: blue;"&gt;class &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryControllerTest&lt;br&gt;&lt;/span&gt;{&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository&lt;/span&gt;&amp;gt; _repository;&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryService &lt;/span&gt;_service;&lt;br&gt;&lt;br&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;SetUp&lt;/span&gt;]&lt;br&gt;&lt;span style="color: blue;"&gt;public void &lt;/span&gt;Setup()&lt;br&gt;{&lt;br&gt;    _repository = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository&lt;/span&gt;&amp;gt;();&lt;br&gt;    _service = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryService&lt;/span&gt;(_repository.Object);&lt;br&gt;}&lt;br&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;Test&lt;/span&gt;]&lt;br&gt;&lt;span style="color: blue;"&gt;public void &lt;/span&gt;List()&lt;br&gt;{&lt;br&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt; fakeCategories = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt; {&lt;br&gt;    &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;{ Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Test1"&lt;/span&gt;, Description=&lt;span style="color: rgb(163, 21, 21);"&gt;"Test1Desc"&lt;/span&gt;},&lt;br&gt;    &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;{ Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Test2"&lt;/span&gt;, Description=&lt;span style="color: rgb(163, 21, 21);"&gt;"Test2Desc"&lt;/span&gt;},&lt;br&gt;    &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;{ Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Test3"&lt;/span&gt;, Description=&lt;span style="color: rgb(163, 21, 21);"&gt;"Test3Desc"&lt;/span&gt;}&lt;br&gt;}.AsQueryable();&lt;br&gt;_repository.Setup(x =&amp;gt; x.GetCategories()).Returns(fakeCategories);&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController &lt;/span&gt;controller = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController&lt;/span&gt;(_service);&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Act&lt;br&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ViewResult &lt;/span&gt;result = controller.List(&lt;span style="color: blue;"&gt;null&lt;/span&gt;) &lt;span style="color: blue;"&gt;as &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ViewResult&lt;/span&gt;;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Assert&lt;br&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.IsNotNull(result, &lt;span style="color: rgb(163, 21, 21);"&gt;"View Result is null"&lt;/span&gt;);&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.IsInstanceOf(&lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;PagedList&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt;), &lt;br&gt;    result.ViewData.Model, &lt;span style="color: rgb(163, 21, 21);"&gt;"Wrong ViewModel"&lt;/span&gt;);&lt;br&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;categories = result.ViewData.Model &lt;span style="color: blue;"&gt;as &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;PagedList&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt;;&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.AreEqual(3, categories.Count,&lt;span style="color: rgb(163, 21, 21);"&gt;"Got wrong number of Categories"&lt;/span&gt;);&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.AreEqual(0, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)categories.PageIndex,&lt;span style="color: rgb(163, 21, 21);"&gt;"Wrong page Index"&lt;/span&gt;);&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.AreEqual(1, (&lt;span style="color: blue;"&gt;int&lt;/span&gt;)categories.PageNumber,&lt;span style="color: rgb(163, 21, 21);"&gt;"Wrong  page Number"&lt;/span&gt;);&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;The Unit Test class decorated with TextFixure attribute which specify that it is unit test class. The test attribute is an indication that it is a test method. The method with Setup attribute will call before execute every test method. This method is using for initialization purpose. If you have five test methods, it will call five times. In the above test, I have used mock objects. Mock objects are simulated objects that can mimic the behaviour of real objects. This is very useful when real object is impractical to incorporate into a unit test such as you don't want to hit the database. In this case, I don't want to hit the database. Instead, I created three fake category objects and setup that returns this fake category objects when there is a call for GetCategories method of the Categoryrepository object. &lt;/p&gt;

&lt;p&gt;_repository.Setup(x =&amp;gt; x.GetCategories()).Returns(fakeCategories); &lt;/p&gt;

&lt;p&gt;The &lt;span style="color: rgb(43, 145, 175);"&gt;Mock&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository&lt;/span&gt;&amp;gt; contains the methods for the behaviour of Mock repository and the repository.Object reperesent the actual repository object. For mocking, I am using the Moq framework. You can download Moq framework from &lt;a href="http://code.google.com/p/moq" mce_href="http://code.google.com/p/moq"&gt;http://code.google.com/p/moq&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The Assert class is using for verfying the results. The test verify the following behaviour with the three fake category objects&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The ViewResult should not be null. &lt;/li&gt;

  &lt;li&gt;The ViewResult should be an instance of PagedList&amp;lt;Category&amp;gt; that supports paging. &lt;/li&gt;

  &lt;li&gt;The category count should be 3. &lt;/li&gt;

  &lt;li&gt;The page index should be 0 and page number should be 1. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When running the unit test, it will fail becuase we have not written any code for List Action method.&lt;/p&gt;

&lt;p&gt;The below shows fail status (Red Signal) from NUnit GUI test runner.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/shijuvarghese/ListFailTest.GIF" mce_src="http://weblogs.asp.net/blogs/shijuvarghese/ListFailTest.GIF" width="506" height="348"&gt; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;In the next step (Green stage), we have to write the code to pass the test. The below is the List action method written for pass the test.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font face="Consolas" size="2"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;AcceptVerbs&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpVerbs&lt;/span&gt;.Get)]&lt;br&gt; &lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ActionResult &lt;/span&gt;List(&lt;span style="color: blue;"&gt;int&lt;/span&gt;? page)&lt;br&gt;  {&lt;br&gt;    &lt;span style="color: blue;"&gt;int &lt;/span&gt;pageSize = &lt;span style="color: rgb(43, 145, 175);"&gt;Convert&lt;/span&gt;.ToInt32(&lt;br&gt;    &lt;span style="color: rgb(43, 145, 175);"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color: rgb(163, 21, 21);"&gt;"pagesize"&lt;/span&gt;]);&lt;br&gt;    &lt;span style="color: blue;"&gt;var &lt;/span&gt;categories = _categoryService.GetCategories().&lt;br&gt;     ToPagedList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;&amp;gt;(page ?? 0, pageSize);&lt;br&gt;    &lt;span style="color: blue;"&gt;return &lt;/span&gt;View(categories);&lt;br&gt;  }&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;When running the test again, it will pass becuase we have written necessary code to pass the test. In the last stage of TDD is refactor where you will be writing code to improve the overall architcture of the application. In this stage, you can write code confidently because your code is covered by unit tests.&lt;/p&gt;

&lt;p&gt;In the next step, you will be writing more unit tests for new identified requirements and behaviours. The below unit test is for the following behaviours while creating a new category.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;The category name should be required. If name is empty, an error message should be set into model state.&lt;/p&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;p&gt;After creating a new category, it would be redirect to List action method.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="code"&gt;&lt;font face="Consolas" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;font face="Consolas" size="2"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;Test&lt;/span&gt;]&lt;br&gt;&lt;span style="color: blue;"&gt;public void &lt;/span&gt;Category_New()&lt;br&gt;{&lt;br&gt;  &lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Arrange     &lt;br&gt;  &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController &lt;/span&gt;controller = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController&lt;/span&gt;(_service);&lt;br&gt;  &lt;span style="color: blue;"&gt;var &lt;/span&gt;category = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;br&gt;  &lt;/span&gt;{ Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"Test"&lt;/span&gt;, Description = &lt;span style="color: rgb(163, 21, 21);"&gt;"TestDescription" &lt;/span&gt;};&lt;br&gt;  &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Act&lt;br&gt;  &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;result = (&lt;span style="color: rgb(43, 145, 175);"&gt;RedirectToRouteResult&lt;/span&gt;)controller.Save(category);&lt;br&gt;  &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Assert&lt;br&gt;  &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: rgb(163, 21, 21);"&gt;"List"&lt;/span&gt;, result.RouteValues[&lt;span style="color: rgb(163, 21, 21);"&gt;"action"&lt;/span&gt;]);&lt;br&gt;}&lt;br&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;Test&lt;/span&gt;]&lt;br&gt;&lt;span style="color: blue;"&gt;public void &lt;/span&gt;Category_Name_Required()&lt;br&gt;{&lt;br&gt; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Arrange            &lt;br&gt;  &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController &lt;/span&gt;controller = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;CategoryController&lt;/span&gt;(_service);&lt;br&gt;  &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Act&lt;br&gt;  &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;category = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Category&lt;/span&gt;();&lt;br&gt;  category.Name = &lt;span style="color: rgb(43, 145, 175);"&gt;String&lt;/span&gt;.Empty;&lt;br&gt;  &lt;span style="color: blue;"&gt;var &lt;/span&gt;result = (&lt;span style="color: rgb(43, 145, 175);"&gt;ViewResult&lt;/span&gt;)controller.Save(category);&lt;br&gt;  &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Assert&lt;br&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;error = result.ViewData.ModelState[&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;].Errors[0];&lt;br&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;Assert&lt;/span&gt;.AreEqual(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name is required."&lt;/span&gt;, error.ErrorMessage);&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;font face="Consolas" size="2"&gt;The below is the implementation code for the above tests.&lt;/font&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font face="Consolas" size="2"&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;AcceptVerbs&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpVerbs&lt;/span&gt;.Post)]&lt;br&gt; &lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ActionResult &lt;/span&gt;Save(&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;category)&lt;br&gt; {&lt;br&gt;   &lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;//Validations&lt;br&gt;   &lt;/span&gt;EnsureValidations(category);&lt;br&gt;   &lt;span style="color: blue;"&gt;if&lt;/span&gt;(!ModelState.IsValid)&lt;br&gt;    {&lt;br&gt;       &lt;span style="color: blue;"&gt;return &lt;/span&gt;View(&lt;span style="color: rgb(163, 21, 21);"&gt;"SaveCategory"&lt;/span&gt;);&lt;br&gt;    }           &lt;br&gt;  _categoryService.Save(category);&lt;br&gt;  &lt;span style="color: blue;"&gt;return &lt;/span&gt;RedirectToAction(&lt;span style="color: rgb(163, 21, 21);"&gt;"List"&lt;/span&gt;);&lt;br&gt;   }        &lt;br&gt;&lt;span style="color: blue;"&gt;private void &lt;/span&gt;EnsureValidations(&lt;span style="color: rgb(43, 145, 175);"&gt;Category &lt;/span&gt;category)&lt;br&gt;{&lt;br&gt;  &lt;span style="color: blue;"&gt;if &lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(category.Name))&lt;br&gt;  {&lt;br&gt;   ModelState.AddModelError(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"Name is required."&lt;/span&gt;);&lt;br&gt;  }&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;The below shows success status (Green Signal) from NUnit GUI test runner.&lt;/p&gt;

&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;img src="http://weblogs.asp.net/blogs/shijuvarghese/TDDGreen.GIF" mce_src="http://weblogs.asp.net/blogs/shijuvarghese/TDDGreen.GIF"&gt; &lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Applying Dependency Injection&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In this application, I am using Dependency Injection pattern that making the application more loosely coupled and it improves the testability of the application. If you are not familiar with Dependency Injection and Inversion of Control (IoC), I recommend to read Martin Fowler’s article &lt;a href="http://martinfowler.com/articles/injection.html" mce_href="http://martinfowler.com/articles/injection.html"&gt;Inversion of Control Containers and the Dependency Injection pattern&lt;/a&gt;.&amp;nbsp; Please check my blog post &lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx" mce_href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx"&gt;ASP.NET MVC Tip: Dependency Injection with Unity Application Block&lt;/a&gt; that demonstrated how you can use the Unity Application Block to perform Dependency Injection within an ASP.NET MVC application.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue;"&gt;public static void &lt;/span&gt;ConfigureUnityContainer() {&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;IUnityContainer &lt;/span&gt;container = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;UnityContainer&lt;/span&gt;();&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: green;"&gt;// Registrations&lt;br&gt;&lt;/span&gt;container.RegisterType&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DBData &lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;DBData&lt;/span&gt;&amp;gt;&lt;br&gt;    (&lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContextLifetimeManager&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DBData&lt;/span&gt;&amp;gt;());&lt;br&gt;container.RegisterType&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;CategoryRepository&lt;/span&gt;&amp;gt;&lt;br&gt;    (&lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContextLifetimeManager&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryRepository&lt;/span&gt;&amp;gt;());&lt;br&gt;container.RegisterType&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryService&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;CategoryService&lt;/span&gt;&amp;gt;&lt;br&gt;    (&lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContextLifetimeManager&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;ICategoryService&lt;/span&gt;&amp;gt;());&lt;br&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;ControllerBuilder&lt;/span&gt;.Current.SetControllerFactory(&lt;br&gt;  &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;UnityControllerFactory&lt;/span&gt;(container));           &lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The above code setup the dependencies with Unity Application block and configure the controller factory with Unity.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;In this post, I demonstrated how to build Test-Driven Development (TDD)&amp;nbsp; applications with Microsoft ASP.NET MVC. ASP.NET MVC is an excellent framework for building TDD based&amp;nbsp; applications with highly loosely coupled manner.&lt;/p&gt;

&lt;p&gt;You can download the source code&amp;nbsp; from &lt;a href="http://weblogs.asp.net/blogs/shijuvarghese/MvcTDDDemo.zip" target="_blank" mce_href="http://weblogs.asp.net/blogs/shijuvarghese/MvcTDDDemo.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7152855" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/tS1KPG8CDwc" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/IoC/default.aspx">IoC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/TDD/default.aspx">TDD</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/07/22/introduction-to-test-driven-development-with-asp-net-mvc.aspx</feedburner:origLink></item><item><title>T4 Template for generate Table Script from XSD</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/pEHoj7F5tEs/t4-template-for-generate-table-script-from-xsd.aspx</link><pubDate>Fri, 10 Jul 2009 05:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7144429</guid><dc:creator>shiju</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=7144429</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=7144429</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/07/10/t4-template-for-generate-table-script-from-xsd.aspx#comments</comments><description>&lt;p&gt;The below T4 template will generate Create Table script from a XSD file. The Template will create a dataset from a XSD file and generate create table script from the dataset.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 13pt; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;template&lt;/span&gt;&lt;span style="color: navy;"&gt; language=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;C#v3.5&lt;/span&gt;"&lt;span style="color: navy;"&gt; hostspecific=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;True&lt;/span&gt;"&lt;span style="color: navy;"&gt; debug=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;True&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;assembly&lt;/span&gt;&lt;span style="color: navy;"&gt; name=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.Core&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;assembly&lt;/span&gt;&lt;span style="color: navy;"&gt; name=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.Data&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;assembly&lt;/span&gt;&lt;span style="color: navy;"&gt; name=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.Xml&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;output&lt;/span&gt;&lt;span style="color: navy;"&gt; extension=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;.sql&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: navy;"&gt; namespace=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: navy;"&gt; namespace=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.IO&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: navy;"&gt; namespace=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.Xml&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: navy;"&gt; namespace=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;System.Data&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;PrepareToRender(); &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;foreach (DataTable dt in ds.Tables) {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tableName= dt.ToString();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;CREATE&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;TABLE&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt; tableName &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;PushIndent("&amp;nbsp; ");&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;foreach (DataColumn dc in dt.Columns) {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;WriteLine( dc.ToString() + "&amp;nbsp; " + MapToSqlType(dc.DataType.Name) + ",");&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;PopIndent();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;#+&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;DataSet ds;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;string tableName;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;void PrepareToRender()&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;ds = new System.Data.DataSet();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;//Load the XSD&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;ds.ReadXmlSchema("Metadata.xsd");&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;string MapToSqlType(string clrType)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; switch(clrType)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; case "String":&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; return "Varchar(50)";&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; case "Int32":&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; return "int";&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; //Do other mapings&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; default:&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; return clrType;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7144429" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/pEHoj7F5tEs" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/T4/default.aspx">T4</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/.Net/default.aspx">.Net</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/07/10/t4-template-for-generate-table-script-from-xsd.aspx</feedburner:origLink></item><item><title>Mini TechEd in Trivandrum</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/WAbWZeJCdf8/mini-teched-in-trivandrum.aspx</link><pubDate>Mon, 15 Jun 2009 07:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7123024</guid><dc:creator>shiju</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=7123024</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=7123024</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/06/15/mini-teched-in-trivandrum.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;a href="http://k-mug.org/" target="_blank"&gt;Kerala Microsoft user’s group&lt;/a&gt;
(K-MUG) is organizing a Mini-TechEd in Trivandrum, India. Don’t miss this Free
opportunity to learn about Windows 7,&amp;nbsp; Visual Studio 2010 features,
WPF, What is new in ASP.NET 4.0, SQL server best practices,SQL logical
query execution and optimization tips,Hidden Gems in SQL Server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Date : 27th June 2009&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Venue : Technopark, Trivandrum&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://k-mug.org/content/teched.aspx" target="_blank"&gt;Register Now!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7123024" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/WAbWZeJCdf8" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/Community+News/default.aspx">Community News</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/06/15/mini-teched-in-trivandrum.aspx</feedburner:origLink></item><item><title>Using .Net 3.5 and C# 3.0 features in T4 templates</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/OXnJX2PkcyU/using-net-3-5-and-c-3-0-features-in-t4-templates.aspx</link><pubDate>Wed, 03 Jun 2009 12:12:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7107041</guid><dc:creator>shiju</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=7107041</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=7107041</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/06/03/using-net-3-5-and-c-3-0-features-in-t4-templates.aspx#comments</comments><description>&lt;p&gt;The T4 templates are compiled against .Net Framework 2.0 by default and it will be restricted to use LINQ and other .Net 3.5 features in your T4 templates.&amp;nbsp; If you want to use any of C# 3.0 or .Net 3.5 features in your T4 templates, you have to specify T4 templates language attribute is C#v3.5 instead of C#. The .Net 3.5 features are using System.Core namespace so that you have to give reference to System.Core namespace in the T4 templates.&lt;br&gt;&lt;br&gt;The below is the syntax &lt;br&gt;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 13pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;template&lt;/span&gt;&lt;span style="color: navy;"&gt; language=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C#v3.5&lt;/span&gt;"&lt;span style="color: navy;"&gt; hostspecific=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;True&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: navy;"&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#@&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: rgb(165, 42, 42); font-weight: bold;"&gt;assembly&lt;/span&gt;&lt;span style="color: navy;"&gt; name=&lt;/span&gt;"&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;System.Core&lt;/span&gt;"&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7107041" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/OXnJX2PkcyU" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/.Net+3.5/default.aspx">.Net 3.5</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/T4/default.aspx">T4</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/C_2300_/default.aspx">C#</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/06/03/using-net-3-5-and-c-3-0-features-in-t4-templates.aspx</feedburner:origLink></item><item><title>Applying Dependency Injection in ASP.NET MVC NerdDinner.com Application</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/oD9JPYkDC5w/applying-dependency-injection-in-asp-net-mvc-nerddinner-com-application.aspx</link><pubDate>Thu, 12 Mar 2009 10:33:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6956368</guid><dc:creator>shiju</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6956368</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6956368</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/03/12/applying-dependency-injection-in-asp-net-mvc-nerddinner-com-application.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" target="_blank" mce_href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx"&gt;ScottGu&lt;/a&gt;, &lt;a href="http://feedproxy.google.com/%7Er/ScottHanselman/%7E3/NppvADBKUGI/FreeASPNETMVCEBookNerdDinnercomWalkthrough.aspx" target="_blank" mce_href="http://feedproxy.google.com/~r/ScottHanselman/~3/NppvADBKUGI/FreeASPNETMVCEBookNerdDinnercomWalkthrough.aspx"&gt;Scott&lt;/a&gt;, &lt;a href="http://haacked.com/archive/2009/03/10/chapter-one-pro-aspnetmvc.aspx" target="_blank" mce_href="http://haacked.com/archive/2009/03/10/chapter-one-pro-aspnetmvc.aspx"&gt;Phil &lt;/a&gt;and &lt;a href="http://feedproxy.google.com/%7Er/wekeroad/EeKc/%7E3/oVFEfqZpL4U/" target="_blank" mce_href="http://feedproxy.google.com/~r/wekeroad/EeKc/~3/oVFEfqZpL4U/"&gt;Rob&lt;/a&gt; have announced a free ASP.NET MVC eBook and an open source ASP.NET MVC application Nerddinner.com. The free eBook is a single chapter of the Wrox’s upcoming title &lt;a href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611" target="_blank" mce_href="http://www.amazon.com/gp/product/0470384611?ie=UTF8&amp;amp;tag=scoblo04-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0470384611"&gt;Professional ASP.NET MVC 1.0&lt;/a&gt;.&amp;nbsp; The free eBook provides an end-to-end walkthrough of building NerdDinner.com application. The free eBook and the free Nerddinner application are extremely useful if anyone is trying to lean ASP.NET MVC. If you are a beginner to ASP.NET MVC, I highly recommend checking the eBook and the NerdDinner.com application. You can download the NerdDinner.com application from &lt;a href="http://nerddinner.codeplex.com/" target="_blank" mce_href="http://nerddinner.codeplex.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In this post, I am applying Dependency Injection to the NerdDinner.com application using Microsoft Unity Application Block. I was looking through the NerdDinner code and observed that controllers have Dependency Injection enabled constructors. So I can apply Dependency Injection through constructor injection without change any existing code. A Dependency Injection framework injects the dependencies into a class when the dependencies are needed. Dependency Injection enables looser coupling between classes and their dependencies and provides better testability of an application and it removes the need for clients to know about their dependencies and how to create them. If you are not familiar with Dependency Injection and Inversion of Control (IoC), read Martin Fowler’s article &lt;a href="http://martinfowler.com/articles/injection.html" target="_blank" mce_href="http://martinfowler.com/articles/injection.html"&gt;Inversion of Control Containers and the Dependency Injection pattern&lt;/a&gt;.&amp;nbsp; In this post, I am using Microsoft Unity Application Block for performing Dependency Injection pattern. Please check my blog post &lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx" target="_blank" mce_href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx"&gt;ASP.NET MVC Tip: Dependency Injection with Unity Application Block&lt;/a&gt; that demonstrated how you can use the Unity Application Block to perform Dependency Injection within an ASP.NET MVC application.&lt;br&gt;&lt;br&gt;In this demo, I am doing constructor injection using Unity container. If a class instantiate using the Resolve method of the Unity container has a constructor that defines one or more dependencies on other classes, the Unity container automatically creates the dependent object instance specified in parameters of the constructor&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;b&gt;Controller constructors and dependencies of NerdDinner application&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Listing 1 – Constructor of DinnersController&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: maroon;"&gt;DinnersController&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;IDinnerRepository&lt;/span&gt; &lt;span style="color: maroon;"&gt;repository&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;dinnerRepository&lt;/span&gt; = &lt;span style="color: maroon;"&gt;repository&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;Listing 2 – Constrcutor of AccountController&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: maroon;"&gt;AccountController&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;IFormsAuthentication&lt;/span&gt; &lt;span style="color: maroon;"&gt;formsAuth&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;IMembershipService&lt;/span&gt; &lt;span style="color: maroon;"&gt;service&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;FormsAuth&lt;/span&gt; = &lt;span style="color: maroon;"&gt;formsAuth&lt;/span&gt; ?? &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;FormsAuthenticationService&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;MembershipService&lt;/span&gt; = &lt;span style="color: maroon;"&gt;service&lt;/span&gt; ?? &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;AccountMembershipService&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;Listing 3 – Constructor of AccountMembership – Concrete class of IMembershipService&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;271&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;272&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: maroon;"&gt;AccountMembershipService&lt;/span&gt;(&lt;span style="color: rgb(166, 83, 0);"&gt;MembershipProvider&lt;/span&gt; &lt;span style="color: maroon;"&gt;provider&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;273&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;_provider&lt;/span&gt; = &lt;span style="color: maroon;"&gt;provider&lt;/span&gt; ?? &lt;span style="color: rgb(166, 83, 0);"&gt;Membership&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Provider&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;274&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;Dependencies of NerdDinner&lt;/b&gt;&lt;br&gt;&lt;br&gt;DinnersController, RSVPController and SearchController have a dependency with IDinnerRepositiry. The concrete implementation of IDinnerRepositiry is DinnerRepositiry. AccountController has dependencies with IFormsAuthentication and IMembershipService. The concrete implementation of IFormsAuthentication is FormsAuthenticationService and the concrete implementation of IMembershipService is AccountMembershipService. The AccountMembershipService has a dependency with ASP.NET Membership Provider.&lt;/p&gt;&lt;p&gt;The below steps will configure Unity to perform constructor injection in NerdDinner application.&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;br&gt;&lt;b&gt;Step 1 – Add reference for Unity Application Block&lt;/b&gt;&lt;br&gt;&lt;br&gt;Add a reference to Microsoft.Practices.Unity.dll and Microsoft.Practices.ObjectBuilder2.&lt;br&gt;You can download Unity from &lt;a href="http://msdn.microsoft.com/en-us/library/dd203104.aspx" target="_blank" mce_href="http://msdn.microsoft.com/en-us/library/dd203104.aspx"&gt;here&lt;/a&gt;. The Unity project is available in CodePlex at &lt;a href="http://www.codeplex.com/unity" target="_blank" mce_href="http://www.codeplex.com/unity"&gt;http://www.codeplex.com/unity&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 2 – Custom LifetimeManager class&lt;/b&gt;&lt;br&gt;&lt;br&gt;Unity provides the functionality to specify the location of instance. This functionality is very useful for the ASP.NET applications where we can store or cache the container in the HttpContext, HttpSession or HttpApplication. In this demo, I used to store the container in current HttpContext.&amp;nbsp; In the below code, I am creating a custom lifetime manager to store container in the current HttpContext.&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;
&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Web&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;Microsoft&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Practices&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Unity&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;namespace&lt;/span&gt; &lt;span style="color: maroon;"&gt;NerdDinner&lt;/span&gt;.&lt;span style="color: maroon;"&gt;IoC&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;HttpContextLifetimeManager&lt;/span&gt;&amp;lt;&lt;span style="color: maroon;"&gt;T&lt;/span&gt;&amp;gt; : &lt;span style="color: rgb(166, 83, 0);"&gt;LifetimeManager&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;IDisposable&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;override&lt;/span&gt; &lt;span style="color: navy;"&gt;object&lt;/span&gt; &lt;span style="color: maroon;"&gt;GetValue&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;HttpContext&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Current&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Items&lt;/span&gt;[&lt;span style="color: navy;"&gt;typeof&lt;/span&gt;(&lt;span style="color: maroon;"&gt;T&lt;/span&gt;).&lt;span style="color: maroon;"&gt;AssemblyQualifiedName&lt;/span&gt;];&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;override&lt;/span&gt; &lt;span style="color: navy;"&gt;void&lt;/span&gt; &lt;span style="color: maroon;"&gt;RemoveValue&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(166, 83, 0);"&gt;HttpContext&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Current&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Items&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Remove&lt;/span&gt;(&lt;span style="color: navy;"&gt;typeof&lt;/span&gt;(&lt;span style="color: maroon;"&gt;T&lt;/span&gt;).&lt;span style="color: maroon;"&gt;AssemblyQualifiedName&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;override&lt;/span&gt; &lt;span style="color: navy;"&gt;void&lt;/span&gt; &lt;span style="color: maroon;"&gt;SetValue&lt;/span&gt;(&lt;span style="color: navy;"&gt;object&lt;/span&gt; &lt;span style="color: maroon;"&gt;newValue&lt;/span&gt;) {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(166, 83, 0);"&gt;HttpContext&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Current&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Items&lt;/span&gt;[&lt;span style="color: navy;"&gt;typeof&lt;/span&gt;(&lt;span style="color: maroon;"&gt;T&lt;/span&gt;).&lt;span style="color: maroon;"&gt;AssemblyQualifiedName&lt;/span&gt;] = &lt;span style="color: maroon;"&gt;newValue&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;void&lt;/span&gt; &lt;span style="color: maroon;"&gt;Dispose&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;RemoveValue&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;}&lt;/p&gt;
&lt;/div&gt;

&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&lt;b&gt;Step 3 – Controller Factory for Unity&lt;/b&gt; &lt;b&gt;and Register Types for Injection&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;
&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Collections&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Generic&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Linq&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Web&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Web&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Mvc&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Web&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Security&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;System&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Security&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Principal&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;NerdDinner&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Models&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;Microsoft&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Practices&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Unity&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;using&lt;/span&gt; &lt;span style="color: maroon;"&gt;NerdDinner&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Controllers&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;namespace&lt;/span&gt; &lt;span style="color: maroon;"&gt;NerdDinner&lt;/span&gt;.&lt;span style="color: maroon;"&gt;IoC&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;UnityControllerFactory&lt;/span&gt; : &lt;span style="color: rgb(166, 83, 0);"&gt;DefaultControllerFactory&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;IUnityContainer&lt;/span&gt; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: maroon;"&gt;UnityControllerFactory&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;IUnityContainer&lt;/span&gt; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;this&lt;/span&gt;.&lt;span style="color: maroon;"&gt;container&lt;/span&gt; = &lt;span style="color: maroon;"&gt;container&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;protected&lt;/span&gt; &lt;span style="color: navy;"&gt;override&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;IController&lt;/span&gt; &lt;span style="color: maroon;"&gt;GetControllerInstance&lt;/span&gt;(&lt;span style="color: rgb(166, 83, 0);"&gt;Type&lt;/span&gt; &lt;span style="color: maroon;"&gt;controllerType&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;try&lt;/span&gt; {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;if&lt;/span&gt; (&lt;span style="color: maroon;"&gt;controllerType&lt;/span&gt; == &lt;span style="color: navy;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;throw&lt;/span&gt; &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"controllerType"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;if&lt;/span&gt; (!&lt;span style="color: navy;"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;IController&lt;/span&gt;).&lt;span style="color: maroon;"&gt;IsAssignableFrom&lt;/span&gt;(&lt;span style="color: maroon;"&gt;controllerType&lt;/span&gt;))&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;throw&lt;/span&gt; &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color: navy;"&gt;string&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Format&lt;/span&gt;(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"Type requested is not a controller: {0}"&lt;/span&gt;, &lt;span style="color: maroon;"&gt;controllerType&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Name&lt;/span&gt;),&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background: rgb(255, 255, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"controllerType"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;return&lt;/span&gt; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Resolve&lt;/span&gt;(&lt;span style="color: maroon;"&gt;controllerType&lt;/span&gt;) &lt;span style="color: navy;"&gt;as&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;IController&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;catch&lt;/span&gt; { &lt;span style="color: navy;"&gt;return&lt;/span&gt; &lt;span style="color: navy;"&gt;null&lt;/span&gt;; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;public&lt;/span&gt; &lt;span style="color: navy;"&gt;static&lt;/span&gt; &lt;span style="color: navy;"&gt;void&lt;/span&gt; &lt;span style="color: maroon;"&gt;Configure&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//create new instance of Unity Container&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;IUnityContainer&lt;/span&gt; &lt;span style="color: maroon;"&gt;container&lt;/span&gt; = &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;UnityContainer&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Register dependencies&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;.&lt;span style="color: maroon;"&gt;RegisterType&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IFormsAuthentication&lt;/span&gt;, &lt;span style="color: rgb(166, 83, 0);"&gt;FormsAuthenticationService&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;.&lt;span style="color: maroon;"&gt;RegisterType&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IMembershipService&lt;/span&gt;,&lt;span style="color: rgb(166, 83, 0);"&gt;AccountMembershipService&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;.&lt;span style="color: maroon;"&gt;RegisterInstance&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(166, 83, 0);"&gt;MembershipProvider&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(166, 83, 0);"&gt;Membership&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Provider&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Inject DinnerRepository for contract IDinnerRepository&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;container&lt;/span&gt;.&lt;span style="color: maroon;"&gt;RegisterType&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IDinnerRepository&lt;/span&gt;, &lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(166, 83, 0);"&gt;DinnerRepository&lt;/span&gt;&amp;gt;(&lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;HttpContextLifetimeManager&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;IDinnerRepository&lt;/span&gt;&amp;gt;());&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(166, 83, 0);"&gt;ControllerBuilder&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Current&lt;/span&gt;.&lt;span style="color: maroon;"&gt;SetControllerFactory&lt;/span&gt;(&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: navy;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(166, 83, 0);"&gt;UnityControllerFactory&lt;/span&gt;(&lt;span style="color: maroon;"&gt;container&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/span&gt;&amp;nbsp;}&lt;/p&gt;
&lt;/div&gt;

&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;The controller factory is responsible for creating controller instances.We extend the built in default controller factory with our own factory for working Unity with ASP.NET MVC.&lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;The above Unity configuration specified in the Configure method tells that, to inject instance of DinnerRepositiry when there is a request for IDinnerRepositiry and&amp;nbsp; inject instance of FormsAuthenticationService when there is a request for IFormsAuthentication and inject instance of AccountMembershipService when there is a request for IMembershipService. The AccountMembershipService class has a dependency with ASP.NET Membership provider. So we configure that inject the instance of Membership Provider. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Step 4 – Modify Global.asax.cs for configure Unity container&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;
&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: navy;"&gt;void&lt;/span&gt; &lt;span style="color: maroon;"&gt;Application_Start&lt;/span&gt;() {&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: maroon;"&gt;RegisterRoutes&lt;/span&gt;(&lt;span style="color: rgb(166, 83, 0);"&gt;RouteTable&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Routes&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(166, 83, 0);"&gt;UnityControllerFactory&lt;/span&gt;.&lt;span style="color: maroon;"&gt;Configure&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;The above code will set the configuration for the Unity container when our ASP.NET MVC application is started.&amp;nbsp; &lt;/p&gt;&lt;p style="margin: 0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0px;"&gt;The source code of the new added files can be download from &lt;a href="http://weblogs.asp.net/blogs/shijuvarghese/IoC_NerdDinner.zip" target="_blank" mce_href="http://weblogs.asp.net/blogs/shijuvarghese/IoC_NerdDinner.zip"&gt;here&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6956368" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/oD9JPYkDC5w" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/IoC/default.aspx">IoC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/03/12/applying-dependency-injection-in-asp-net-mvc-nerddinner-com-application.aspx</feedburner:origLink></item><item><title>ASP.NET MVC Tip: Add a new T4 template for making MVCContrib Grid Helper Component</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/cbTM7yEx7Og/asp-net-mvc-tip-add-a-new-t4-template-for-making-mvccontrib-grid-helper-component.aspx</link><pubDate>Wed, 04 Mar 2009 05:20:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6937049</guid><dc:creator>shiju</dc:creator><slash:comments>15</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6937049</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6937049</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/03/04/asp-net-mvc-tip-add-a-new-t4-template-for-making-mvccontrib-grid-helper-component.aspx#comments</comments><description>&lt;p&gt;In this tip, I demonstrate how you can add a T4 scaffolding template within the “Add View” dialog of the ASP.NET MVC Framework. I am creating a List scaffolding template for &lt;a href="http://www.codeplex.com/MVCContrib" target="_blank" mce_href="http://www.codeplex.com/MVCContrib"&gt;MVCContrib&lt;/a&gt; Grid helper component. Earlier, I have &lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/07/23/asp-net-mvc-grid-view-using-mvccontrib.aspx" target="_blank" mce_href="http://weblogs.asp.net/shijuvarghese/archive/2008/07/23/asp-net-mvc-grid-view-using-mvccontrib.aspx"&gt;blogged&lt;/a&gt; about how to use MVCContrib Grid helper component but recently the component has changed a lot and introducing a fluent interface&amp;nbsp; that provides a cleaner and more discoverable API. You can read all details from &lt;a href="http://www.jeremyskinner.co.uk/2009/02/08/rewriting-the-mvccontrib-grid/" target="_blank" mce_href="http://www.jeremyskinner.co.uk/2009/02/08/rewriting-the-mvccontrib-grid/"&gt;Jeremy Skinner's blog&lt;/a&gt; about the new enhancements of MVCContrib Grid helper component. I am creating the T4 template against the latest trunk of MVCContrib Grid helper. &lt;br&gt;&lt;/p&gt;&lt;b&gt;Overriding default T4 templates of ASP.NET MVC&lt;/b&gt;&lt;br&gt;&lt;p&gt;The default behaviour of T4 templates available in the&amp;nbsp; “AddController” and “AddView” dialog is machine-level. You can override the default T4 templates of ASP.NET MVC framework at per project level and also able to add additional templates within the “Add Controller” and “Add View” dialog. if you want override the global T4 tempates at project level, just copy the&amp;nbsp; C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC\CodeTemplates” folder into your ASP.NET MVC project. When you add T4 templates at project level, you should set the “Custom Tool” property of each of the T4 template files to an empty string value. Otherwise Visual Studio will try to transform the template so that you will get an error. The CodeTemplates folder contains two subfolders AddController and AddView and you can add new templates into this folders. If you add a new T4 template under the AddView folder, the new template will show in the "Add View" dialog. In this demo, I am adding a new template named MvcContribList.tt. For adding a new template within the Visual Studio, just add a text file and rename it with .tt extension. &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/shijuvarghese/addview.bmp" title="AddView Dialog" alt="AddView Dialog" mce_src="http://weblogs.asp.net/blogs/shijuvarghese/addview.bmp" width="341" height="374"&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;The Add View dialog shows the new added template MvcContribList in the View content list.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I have taken the default List.tt template and modified it for creating the new template for working with MVCContrib Grid helper component. I have added the below code to working with MVCContrib Grid helper. &lt;br&gt;&lt;/p&gt;&lt;div style="background: rgb(248, 248, 248) none repeat scroll 0% 0%; font-family: Consolas; font-size: 11pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;&amp;lt;%=&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;Html.Grid&amp;lt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt; mvcHost.ViewDataType &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;gt;(Model).Columns(column&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach(string propertyName in properties) {&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;column.For(x&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;x.&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#=&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt; propertyName &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;);&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#&lt;/span&gt;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt; } &lt;/span&gt;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;column.For(x&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;Html.ActionLink("Edit",&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;"Edit",&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;new&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;{&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;id&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;x.ID&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;})).DoNotEncode();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;column.For(x&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;Html.ActionLink("Delete",&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;"Delete",&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;new&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;{&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;id&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;x.ID&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;})).DoNotEncode();&lt;/span&gt;&lt;span style="color: navy;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;})&lt;/span&gt;&lt;span style="color: navy;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;.Attributes(style&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;"width:100%")&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/span&gt;&amp;nbsp;&lt;span style="color: gray;"&gt;.Empty("There&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;are&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;no&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;records")&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;%=&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;Html.ActionLink("Create&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;New",&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;"Create")&lt;/span&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;span style="color: gray;"&gt;%&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/span&gt;&amp;nbsp;&lt;span style="color: navy;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;lt;#&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(240, 248, 255) none repeat scroll 0% 0%; color: rgb(25, 25, 112); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;&lt;span style="background: gray none repeat scroll 0% 0%; color: white; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/span&gt;&amp;nbsp;&lt;span style="background: rgb(255, 215, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The source code along with a sample project available from &lt;a href="http://weblogs.asp.net/blogs/shijuvarghese/ScaffoldingMVCDemo.zip" target="_blank" mce_href="http://weblogs.asp.net/blogs/shijuvarghese/ScaffoldingMVCDemo.zip"&gt;here &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Summary &lt;/b&gt;&lt;/p&gt;&lt;p&gt;In this tip, I demonstrated how to customizing and adding T4 templates and created a new T4 template for working with MVCContrib Grid helper component. You can easily override the global T4 templates of ASP.NET MVC framework and also able to add additional templates within the “Add Controller” and “Add View” dialog.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6937049" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/cbTM7yEx7Og" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/T4/default.aspx">T4</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/03/04/asp-net-mvc-tip-add-a-new-t4-template-for-making-mvccontrib-grid-helper-component.aspx</feedburner:origLink></item><item><title>ASP.NET MVC 1.0 Release Candidate (RC) Released</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/kQM43I20SN4/asp-net-mvc-1-0-release-candidate-rc-released.aspx</link><pubDate>Wed, 28 Jan 2009 02:51:24 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6863754</guid><dc:creator>shiju</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6863754</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6863754</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-rc-released.aspx#comments</comments><description>&lt;p&gt;After 5 CTP versions and 1 Beta version, Microsoft has finally shipped Release Candidate version of ASP.NET MVC 1.0. You can download the RC version from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=f4e4ee26-4bc5-41ed-80c9-261336b2a5b6&amp;amp;displaylang=en" target="_blank"&gt;here&lt;/a&gt;. One of the new features of ASP.NET MVC 1.0. is the scaffoldig support using Visual Studio's built-in T4. You can read full details from Scott Guthrie's blog post &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx" target="_blank"&gt;ASP.NET MVC 1.0 Release Candidate Now Available&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Below are the some of my existing blog posts about ASP.NET MVC.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/07/09/asp-net-mvc-vs-asp-net-web-form.aspx" target="_blank"&gt;ASP.net MVC Vs ASP.net Web Form&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/07/23/asp-net-mvc-grid-view-using-mvccontrib.aspx" target="_blank"&gt;ASP.NET MVC Grid View using MVCContrib&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/01/asp-net-mvc-tip-ajax-and-validations-using-jquery.aspx" target="_blank"&gt;ASP.NET MVC Tip: Ajax and Validations using jQuery&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/10/asp-net-mvc-tip-dependency-injection-with-structuremap.aspx" target="_blank"&gt;ASP.NET MVC Tip: Dependency Injection with StructureMap&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx" target="_blank"&gt;ASP.NET MVC Tip: Dependency Injection with Unity Application Block&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/12/18/secure-asp-net-mvc-applications.aspx" target="_blank"&gt;Secure ASP.NET MVC Applications&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6863754" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/kQM43I20SN4" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-rc-released.aspx</feedburner:origLink></item><item><title>I Became Father</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/SMCG6VE9pWc/i-became-father.aspx</link><pubDate>Mon, 19 Jan 2009 23:43:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6845119</guid><dc:creator>shiju</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6845119</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6845119</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/01/19/i-became-father.aspx#comments</comments><description>&lt;p&gt;Tuesday, the 13th of January 2009, was the most memorable day in my life. I became a father for the first-time! My wife Rosmi and I were blessed with a baby girl. The name of the baby is &lt;b&gt;Irene Rose Shiju&lt;/b&gt;. Both Rosmi and Irene are doing great.&lt;/p&gt;&lt;p&gt;&lt;img src="http://weblogs.asp.net/blogs/shijuvarghese/IreneRose_thumb.jpg" mce_src="http://weblogs.asp.net/blogs/shijuvarghese/IreneRose_thumb.jpg"&gt;&lt;/p&gt;&lt;p&gt;Irene Rose - Our little angel &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6845119" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/SMCG6VE9pWc" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/Personal/default.aspx">Personal</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/01/19/i-became-father.aspx</feedburner:origLink></item><item><title>xVal - An excellent validation framework for ASP.NET MVC</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/kp3jxVp-ImA/xval-an-excellent-validation-framework-for-asp-net-mvc.aspx</link><pubDate>Mon, 12 Jan 2009 12:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6830648</guid><dc:creator>shiju</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6830648</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6830648</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2009/01/12/xval-an-excellent-validation-framework-for-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blog.codeville.net/" target="_blank" mce_href="http://blog.codeville.net/"&gt;Steve Sanderson&lt;/a&gt; has developed an excellent validation framework for ASP.NET MVC. His validation framework &lt;a href="http://xval.codeplex.com/" target="_blank" mce_href="http://xval.codeplex.com/"&gt;xVal &lt;/a&gt;is an open-source project hosted on &lt;a href="http://feeds.codeville.net/%7Er/SteveCodeville/%7E3/508092535/" target="_blank" mce_href="http://feeds.codeville.net/~r/SteveCodeville/~3/508092535/"&gt;CodePlex&lt;/a&gt;.&amp;nbsp; You can read more details from his blog post &lt;a href="http://feeds.codeville.net/%7Er/SteveCodeville/%7E3/508092535/" target="_blank" mce_href="http://feeds.codeville.net/~r/SteveCodeville/~3/508092535/"&gt;xVal - a validation framework for ASP.NET MVC&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6830648" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/kp3jxVp-ImA" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2009/01/12/xval-an-excellent-validation-framework-for-asp-net-mvc.aspx</feedburner:origLink></item><item><title>Secure ASP.NET MVC Applications</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/vEyfAgaoaXA/secure-asp-net-mvc-applications.aspx</link><pubDate>Fri, 19 Dec 2008 03:02:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6796778</guid><dc:creator>shiju</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6796778</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6796778</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2008/12/18/secure-asp-net-mvc-applications.aspx#comments</comments><description>&lt;p&gt;One of the greatest advantages of ASP.NET MVC is that it provides a "Close to the Metal" programming experience and you have full control over the HTML. It aslo means that you should care about the vulnerabilities regards with your HTML. In webform, server controls would be automatically HTML-encoded their outputs. While developing ASP.NET MVC apllications, you should filter your HTML to avoid &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting" target="_blank" mce_href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt; attacks. Use the following HTML helper methods to avoid vulnerabilities in your ASP.NET MVC applications.&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;b&gt;Use Html.Encode to defense XSS&lt;/b&gt;&lt;br&gt;&lt;br&gt;Use Html.Encode Helper method if you output user-supplied data.&lt;br&gt;&lt;br&gt;Your search result for category : &amp;lt;%=Html.Encode(ViewData["Category"]) %&amp;gt;&lt;br&gt;&lt;br&gt;Lets assume that if the user supplied "&amp;lt;script&amp;gt;alert('XSS')&amp;lt;/script&amp;gt;" for input data , the Html.Encode will avoid to execute&amp;nbsp; as a JavaScript function&amp;nbsp; and will ensures to display that string as a literal text. When you using built-in Helper methods, It will automatically HTML-encode their outputs. As &lt;a href="http://feeds.feedburner.com/%7Er/wekeroad/EeKc/%7E3/486166976/" target="_blank" mce_href="http://feeds.feedburner.com/~r/wekeroad/EeKc/~3/486166976/"&gt;Rob Conery said&lt;/a&gt;, Html.Encode is not a silver bullet to avoid XSS&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;b&gt;Use Html.AntiForgeryToken to defense &lt;a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery" target="_blank" mce_href="http://en.wikipedia.org/wiki/Cross-site_request_forgery"&gt;Cross-Site Request Forgery (CSRF)&lt;/a&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;The Html.AntiForgeryToken helper method provides the support for detecting and defense CSRF attacks. This helper method available in Microsft ASP.NET MVC Futures assembly (Microsoft.Web.Mvc.dll). The assembly can download from &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18459" mce_href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18459"&gt;http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18459 &lt;/a&gt;.&amp;nbsp; Check the below example &lt;br&gt;&lt;br&gt;&amp;lt;% Html.BeginForm("Save", "Category", FormMethod.Post); %&amp;gt;&lt;br&gt;&amp;lt;%= Html.AntiForgeryToken() %&amp;gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br&gt;&amp;lt;% Html.EndForm(); %&amp;gt;&lt;br&gt;&lt;br&gt;The AntiForgeryToken helper would&amp;nbsp; generate a hiiden field named __MVC_AntiForgeryToken and gave a value that randomly generated for each user request. And at the same it gave cookie with name __MVC_AntiForgeryToken and the value would be constant for user session.&lt;br&gt;&lt;br&gt;&amp;lt;form method="post" action="/Category/Save"&amp;gt;&lt;br&gt;&amp;lt;input type="hidden" value="34/LV6nApPw0VWjxZkwY1imE8U8c+fAthll+ssF1fhbbK20HYA1EzXB6xaHqCHo4" name="__MVC_AntiForgeryToken"/&amp;gt;&lt;br&gt;&amp;lt;/form&amp;gt;&lt;br&gt;&lt;br&gt;The authorization filter atrribute [ValidateAntiForgeryToken] will check the all incoming request with form value __MVC_AntiForgeryToken and block the request if there is a invalid token is supplied. A CSRF attacker can't know the randomly generated value of AntiForgeryToken.&lt;br&gt;&lt;br&gt;The below example used [ValidateAntiForgeryToken] in the controller action to validate the AntiForgeryToken.&lt;br&gt;&lt;br&gt;&amp;nbsp;[ValidateAntiForgeryToken]&lt;br&gt;&amp;nbsp;public ActionResult Save(FormCollection&amp;nbsp; form) {&lt;br&gt;&amp;nbsp; }&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6796778" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/vEyfAgaoaXA" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2008/12/18/secure-asp-net-mvc-applications.aspx</feedburner:origLink></item><item><title>My UG Talk on ASP.NET MVC</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/z5jjjydHR3w/my-ug-talk-on-asp-net-mvc.aspx</link><pubDate>Tue, 16 Dec 2008 01:32:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6789197</guid><dc:creator>shiju</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6789197</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6789197</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2008/12/15/my-ug-talk-on-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;I did an another UG presentation on the ASP.NET MVC Framework for
&lt;a href="http://k-mug.org/content/UGMeet131208.aspx" target="_blank" mce_href="http://k-mug.org/content/UGMeet131208.aspx"&gt;K-Mug&lt;/a&gt; (Kerala Microsoft User Group) at &lt;a href="http://technopark.org/" target="_blank" mce_href="http://technopark.org/"&gt;Technopark&lt;/a&gt;, India. You can download the presentation material from &lt;a href="http://cid-bda2d66760670abf.skydrive.live.com/self.aspx/aspnetmvc/aspnet%7C_mvc%7C_ugsession%7C_tvm.pps" mce_href="http://cid-bda2d66760670abf.skydrive.live.com/self.aspx/aspnetmvc/aspnet|_mvc|_ugsession|_tvm.pps"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6789197" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/z5jjjydHR3w" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/Community+News/default.aspx">Community News</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2008/12/15/my-ug-talk-on-asp-net-mvc.aspx</feedburner:origLink></item><item><title>UG Session on ASP.NET MVC </title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/WTCc2uR2u4U/ug-session-on-asp-net-mvc.aspx</link><pubDate>Mon, 17 Nov 2008 01:16:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6742400</guid><dc:creator>shiju</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6742400</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6742400</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2008/11/16/ug-session-on-asp-net-mvc.aspx#comments</comments><description>&lt;p&gt;Last saturday, I did a presentation on the ASP.NET MVC framework for &lt;a href="http://k-mug.org/" target="_blank" mce_href="http://k-mug.org/"&gt;K-Mug&lt;/a&gt; (Kerala Microsoft User Group, India). This was an introduction talk on ASP.NET MVC. You can download the presentation from &lt;a href="http://cid-bda2d66760670abf.skydrive.live.com/self.aspx/aspnetmvc/introduction%7C_aspnet%7C_mvc.pps" target="_blank" mce_href="http://cid-bda2d66760670abf.skydrive.live.com/self.aspx/aspnetmvc/introduction|_aspnet|_mvc.pps"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6742400" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/WTCc2uR2u4U" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/Community+News/default.aspx">Community News</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2008/11/16/ug-session-on-asp-net-mvc.aspx</feedburner:origLink></item><item><title>ASP.NET MVC Tip: Dependency Injection with Unity Application Block</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/KUnfl69vQ5o/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx</link><pubDate>Fri, 24 Oct 2008 12:26:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6701786</guid><dc:creator>shiju</dc:creator><slash:comments>17</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6701786</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6701786</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx#comments</comments><description>&lt;p&gt;In my &lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/10/asp-net-mvc-tip-dependency-injection-with-structuremap.aspx" target="_blank"&gt;earlier post&lt;/a&gt;, I have explained how to use dependency injection pattern in ASP.net MVC application using StructureMap. In this post, I demonstrate how you can use dependency injection pattern using Microsoft&amp;#8217;s Unity Application Block (Unity). If you want to develop an ASP.NET MVC application fully with Microsoft stack, you can use Unity Application Block to perform dependency injection.Unity is a cool dependency injection container and I hope that it will become more powerful in the future releases.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introduction to Unity&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Unity is a lightweight, extensible dependency injection container that provides the support for constructor, property, and method call injection. Unity has a service location capability that allows the ASP.NET developer to store or cache the container in the ASP.NET session, application or per Request. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Register Dependencies&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Unity provides two methods for registering types and mappings with the container. The RegisterType method registers a type with the container and the RegisterInstance method registers with the container an existing instance of a type.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();            
&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;();&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The above code tells the Unity Container that, to inject the instance of CategoryRepository when there is a request for ICategoryRepository and the container will create a new instance of CategoryRepository every time when there is request for ICategoryRepository. The default behavior is for the container to use a transient lifetime manager and the container will not store or cache a reference to the object. If you want singleton behavior for objects, you have to register a LifetimeManager. A lifetime manager controls how stores references to object instances and reused within the container.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();
    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ContainerControlledLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;());&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The above registration specify that any time an instance of ICategoryRepository is requested, you will get back the same instance of CategoryRepository as long as the container is alive. The container will create a new instance at the time of first request and will be use the same instance for the later requests. The ContainerControlledLifeTimeManager class provides the singleton behavior for the container.&lt;/p&gt;

&lt;p&gt;You can create your own custom LifetimeManager class derive from LifetimeManager class. The important methods of LifetimeManager class are GetValue that returns the instance, SetValue method store the instance value and RemoveValue method reomove the instance from the container.&lt;/p&gt;

&lt;p&gt;public abstract class LifetimeManager : ILifetimePolicy 
  &lt;br /&gt;{ 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public abstract object GetValue(); 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public abstract void SetValue(object newValue); 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public abstract void RemoveValue(); 

  &lt;br /&gt;} &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Unity with an ASP.NET MVC application&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In this tip, I show how you can use the Unity Application Block to perform Dependency Injection within an ASP.NET MVC application.&amp;#160; In this tip, I will show you how to perform constructor injection. Constructor Injection will push dependencies into a concrete class through constructor arguments. &lt;/p&gt;

&lt;p&gt;The below code listings show that a controller class and its dependent classes. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 1 &amp;#8211; CategoryController&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryController &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;: &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Controller &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_categoryService &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;

        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;//Inject instance of CategoryService using construction injection
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;CategoryController&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;categoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_categoryService &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;categoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        }
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;/// &amp;lt;summary&amp;gt;
        /// 
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;page&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;[&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;AcceptVerbs&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;HttpVerbs&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Get&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;)]
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ActionResult &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;List&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;int&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;? &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;page&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;var &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;categories &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_categoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;page &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;?? &lt;/span&gt;&lt;span style="background: #e6ffff"&gt;0&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #e6ffff"&gt;10&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;View&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;categories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);
        }
    }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 2 &amp;#8211; ICategoryService&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public interface &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;PagedList&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;int &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageIndex&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;int &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageSize&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;); 
    }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 3 &amp;#8211; CategoryService&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;  &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryService &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;: &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService  &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
         &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_repository &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;/// &amp;lt;summary&amp;gt;
         /// &lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;Creates a CategoryService based on the passed-in repository
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;/// &amp;lt;/summary&amp;gt;
         /// &amp;lt;param name=&amp;quot;repository&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;An ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;&amp;lt;/param&amp;gt;
     &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;CategoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;repository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_repository &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;repository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;if &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_repository &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;== &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;)
           &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;throw new 
                 &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;InvalidOperationException&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #ffffe6"&gt;&amp;quot;Repository cannot be null&amp;quot;&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);
        }

    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;PagedList&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;int &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageIndex&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;int &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageSize&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) { 
       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_repository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;().
         &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ToPagedList&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageIndex&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;pageSize&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;); 
        }
    }&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 4 &amp;#8211; ICategoryRepository&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public interface &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IQueryable&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();       
    }&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 5 &amp;#8211; CategoryRepository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryRepository &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;: &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository  &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{

       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_db&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;CategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;data&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {            
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_db &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;data&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
            
        }

        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;Linq To Sql implementation for Categories
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;IQueryable of Categories&lt;/span&gt;&lt;span style="background: #f8f8f8; color: gray"&gt;&amp;lt;/returns&amp;gt;
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IQueryable&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetCategories&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {

            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return from &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;c &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;in &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;_db&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;DataContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Categories
                   &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;select new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Category &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
                       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ID&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;=&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;c&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ID&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
                       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Name&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;=&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;c&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Name&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
                       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Description&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;=&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;c&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Description&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
                       &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;CategoryType &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;c&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;CategoryType
                   &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;};

        }
   }&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing 6 &amp;#8211; myFinanceData&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public  class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData
    &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;private &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceDataContext &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;dataContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;

        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceDataContext &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;DataContext &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;get &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
                &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;if &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;dataContext &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;== &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {
                    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;dataContext &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceDataContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();
                }

                &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;dataContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
            }
        }
    }&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depedencies &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CategoryController has a dependency with ICategoryService. The concrete implementation of ICategoryService, i.e. CategoryService has a dependency with ICategoryRepository. The concrete implementation of ICategoryRepository, i.e. CategoryRepository has a dependency with myFinanceData. When we calling action methods of Category controller, we need to create objects of CategoryService, CategoryRepository and myFinanceData. &lt;/p&gt;

&lt;p&gt;The below steps will configure Unity to perform constructor injection in our ASP.NET MVC application. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 &amp;#8211; Add reference for Unity Application Block&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Add a reference to Microsoft.Practices.Unity.dll and Microsoft.Practices.ObjectBuilder2. &lt;/p&gt;

&lt;p&gt;You can download Unity from &lt;a href="http://www.codeplex.com/unity" target="_blank"&gt;http://www.codeplex.com/unity&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 &amp;#8211; Custom LifetimeManager class&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Unity provides the functionality to specify the location of instance. This functionality is very useful for the ASP.NET applications where we can store or cache the container in the HttpContext, HttpSession or HttpApplication. In this tip, I used to store the container in current HttpContext.&amp;#160; In the below code, I am creating a custom lifetime manager to store container in the current HttpContext.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContextLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;T&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt; : &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;LifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IDisposable &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public override object &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Current&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Items&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;[&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;typeof&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;T&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;).&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;AssemblyQualifiedName&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;];
        }
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public override void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RemoveValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Current&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Items&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Remove&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;typeof&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;T&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;).&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;AssemblyQualifiedName&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);
        }
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public override void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;SetValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;object &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;newValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContext&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Current&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Items&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;[&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;typeof&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;T&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;).&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;AssemblyQualifiedName&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;]
                = &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;newValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        }
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Dispose&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RemoveValue&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();
        }&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 &amp;#8211; Controller Factory for Unity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityControllerFactory &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;: &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;DefaultControllerFactory
&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;

    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;UnityControllerFactory&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;)
    {
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;this&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
    }

    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;protected override &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IController &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;GetControllerInstance&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Type &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;controllerType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;)
    {
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;try &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;if &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;controllerType &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;== &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;)
                &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;throw new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ArgumentNullException&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #ffffe6"&gt;&amp;quot;controllerType&amp;quot;&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);

            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;if &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(!&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;typeof&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IController&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;).&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;IsAssignableFrom&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;controllerType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;))
                &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;throw new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ArgumentException&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;string&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Format&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(
                    &lt;/span&gt;&lt;span style="background: #ffffe6"&gt;&amp;quot;Type requested is not a controller: {0}&amp;quot;&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
                    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;controllerType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Name&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;),
                    &lt;/span&gt;&lt;span style="background: #ffffe6"&gt;&amp;quot;controllerType&amp;quot;&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Resolve&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;controllerType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;) &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;as &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IController&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;;
        }
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;catch &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{ &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;return null&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;; }

    }
 }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The controller factory is responsible for creating controller instances.We extend the built in default controller factory with our own factory for working Unity with ASP.NET MVC.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 &amp;#8211; Register Types and Set Controller Factory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public static class &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Bootstrapper &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;{

    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public static void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ConfigureStructureMap&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {

        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;StructureMap&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;StructureMapConfiguration&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;AddRegistry&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;DBServiceRegistry&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;());
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;StructureMap&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;StructureMapConfiguration&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;AddRegistry&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;DInjRegistry&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;());


        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;,
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ContainerControlledLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;());
    }
    &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;public static void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ConfigureUnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;IUnityContainer &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container &lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;= &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;// Registrations
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;
            (&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContextLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;myFinanceData&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;());
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;
            (&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContextLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryRepository&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;());
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterType&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;, &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;CategoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;
            (&lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;HttpContextLifetimeManager&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #2b91af"&gt;ICategoryService&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;&amp;gt;());
        &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;ControllerBuilder&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Current&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;SetControllerFactory&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;new &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;myFinance&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Web&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Controllers&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;UnityControllerFactory&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;container&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;));           
    }
}&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The above Unity configuration specified in the ConfigureUnityContainer method, tells to inject CategoryService when there is a request for ICategoryService. And also inject CategoryRepository when there is a request for ICategoryRepository. The CategoryRepository class has a dependency with myFinanceData. So we configure that inject the instance of myFinanceData when there is request for myFinanceData. The above code also set the controller factory for working with Unity. &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 &amp;#8211; Modify Global.asax.cs for configure Unity container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background: #f8f8f8"&gt; &lt;/span&gt;&lt;span style="background: #f8f8f8; color: navy"&gt;protected void &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Application_Start&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;() {
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;RegisterRoutes&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;(&lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;RouteTable&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;Routes&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;);            
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: green"&gt;//Configure for Dependecny Injection using Unity
            &lt;/span&gt;&lt;span style="background: #f8f8f8; color: #a65300"&gt;Bootstrapper&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;.&lt;/span&gt;&lt;span style="background: #f8f8f8; color: maroon"&gt;ConfigureUnityContainer&lt;/span&gt;&lt;span style="background: #f8f8f8"&gt;();           
            
        }&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above code will set the configuration for the Unity container when our ASP.NET MVC application is started. The Bootstrapper class is specified in the Step 4. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In this tip, I demonstrated how you can use the Unity Application Block to perform Dependency Injection within an ASP.NET MVC application. The Unity Application Block allows us to develop highly loosely coupled ASP.NET MVC applications using fully with Microsoft stack.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6701786" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/KUnfl69vQ5o" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/IoC/default.aspx">IoC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx</feedburner:origLink></item><item><title>ASP.NET MVC for Live Applications</title><link>http://feedproxy.google.com/~r/ShijuVBlog/~3/cIGgXhHCzdw/asp-net-mvc-for-live-applications.aspx</link><pubDate>Mon, 20 Oct 2008 08:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6691236</guid><dc:creator>shiju</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/shijuvarghese/rsscomments.aspx?PostID=6691236</wfw:commentRss><wfw:comment>http://weblogs.asp.net/shijuvarghese/commentapi.aspx?PostID=6691236</wfw:comment><comments>http://weblogs.asp.net/shijuvarghese/archive/2008/10/20/asp-net-mvc-for-live-applications.aspx#comments</comments><description>&lt;p&gt;ASP.NET MVC has got big attention in the community and lot of people are looking to develop production ready applications with ASP.NET MVC. When can we start production ready applications with ASP.NET MVC? Since ASP.NET MVC Beta version is available, I think this is time to start live application with ASP.NET MVC. There is already lot of live applications build with ASP.NET MVC. &lt;a href="http://stackoverflow.com/" target="_blank" mce_href="http://stackoverflow.com/"&gt;Stackoverflow&lt;/a&gt; is really a killer web application build with ASP.NET MVC.&amp;nbsp; If you are an Architect, this is the right time to develop infrastructure frameworks for ASP.NET MVC. The RTM version will be in Q4 2008 or Q1 2009. I hope that the RTM version will be release on this December. The changes from Beta to RTM version will be very minimum and the Beta release comes with an explicit "go-live" license that allows you to deploy it in production environments. Scott Guthrie wrote in his bog post &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/10/16/asp-net-mvc-beta-released.aspx%20" target="_blank" mce_href="http://weblogs.asp.net/scottgu/archive/2008/10/16/asp-net-mvc-beta-released.aspx "&gt;ASP.NET MVC Beta Released&lt;/a&gt; “Today's ASP.NET MVC Beta release comes with an explicit "go-live" license that allows you to deploy it in production environments.&amp;nbsp; The previous preview releases also allowed go-live deployments, but did so by not denying permission to deploy as opposed to explicitly granting it (which was a common source of confusion).&amp;nbsp; Today's release is clearer about this in the license. The beta release is getting close to V1 feature complete, although there are still a few more features that will be added before the final "V1" release (including several VS tooling enhancements).&amp;nbsp; The team decided to call this release a "beta", though, because the quality and testing of it is higher than the previous previews (a lot of bug fixes and performance tuning work went into it), and they feel that the core features that are in it are now "baked enough" that there won't be major changes from this release to the final product”.&lt;br&gt;&lt;br&gt;I believe that breaking changes and new features will be available after the release of V1. When I asked about the SubController infrastructure, Scott Guthrie replied that “The team currently has that penciled in for the release immediately following V1.&amp;nbsp; The reason for not having it in V1 are: 1) there are a couple of approaches that could be used for it, and we want to spend a little more time investigating and exploring them (and not bake something prematurely into V1), and 2) there is a subcontroller implementation currently in the MVCContrib project that be used with the V1 release.&amp;nbsp; I'd recommend looking at using that one if you need a subcontroller pattern, and then we'll bake one into the core binary once we feel confident on a final design”.&lt;br&gt;&lt;br&gt;&lt;b&gt;Our Development Attitude&lt;/b&gt;&lt;br&gt;&lt;br&gt;ASP.NET MVC is a great technology and you can build powerful and highly maintainable web applications with ASP.NET MVC. But please keep in mind that you can build good and bad applications with same technology. So our attitude and development approaches are very important for building great software and the most important things is that we should have a good architecture for good software. I strongly believe that the .Net developer community should be more focus on object oriented principles and practices. I believe that the ALT.NET movement is a good sign and the &lt;a href="http://monkeys.codebetter.com/blogs/glenn.block/archive/2008/09/11/the-alt-net-criterion.aspx" target="_blank" mce_href="http://monkeys.codebetter.com/blogs/glenn.block/archive/2008/09/11/the-alt-net-criterion.aspx"&gt;ALT.NET Criterion&lt;/a&gt; is good for building better software. The ASP.NET MVC technology is based on a loosely coupled architecture and the framework is highly testable so that it enables to build great software. When we build applications with ASP.NET MVC, we should focus on object-oriented principles and practices and take this time to change our attitude towards object-oriented way. In the past, applications have been data-centric and this has been gradually changing to object-oriented way. I would like to suggest using an ORM for data persistence, Persistence Ignorance (PI) objects for domain layer,&amp;nbsp; Repository pattern, Inversion of Control (IoC) container for dependency injection (DI) along with your ASP.NET MVC application. And I believe that Test Driven Development (TDD) gives you lot of values to your application development process.&lt;br&gt;&lt;br&gt;&lt;b&gt;Learning Resources to start applications&lt;/b&gt;&lt;br&gt;&lt;br&gt;Stephen Walther’s blog post &lt;a href="http://weblogs.asp.net/stephenwalther/archive/2008/10/17/a-guide-to-learning-asp-net-mvc-beta-1.aspx" target="_blank" mce_href="http://weblogs.asp.net/stephenwalther/archive/2008/10/17/a-guide-to-learning-asp-net-mvc-beta-1.aspx"&gt;A Guide to Learning ASP.NET MVC Beta 1&lt;/a&gt; contains lot of links that provides to learn and develop applications with ASP.NET MVC. For validations, Emad Ibrahim’s blog post &lt;a href="http://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet-mvc/" target="_blank" mce_href="http://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet-mvc/"&gt;Client &amp;amp; Server Side Validation in ASP.NET MVC&lt;/a&gt; is an excellent one. For dependency injection, my blog post&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/10/asp-net-mvc-tip-dependency-injection-with-structuremap.aspx" target="_blank" mce_href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/10/asp-net-mvc-tip-dependency-injection-with-structuremap.aspx"&gt; ASP.NET MVC Tip: Dependency Injection with StructureMap&lt;/a&gt; provides step by step instructions to apply dependency injection into an ASP.NET MVC application using Structuremap. My blog post A&lt;a href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/01/asp-net-mvc-tip-ajax-and-validations-using-jquery.aspx" target="_blank" mce_href="http://weblogs.asp.net/shijuvarghese/archive/2008/10/01/asp-net-mvc-tip-ajax-and-validations-using-jquery.aspx"&gt;SP.NET MVC Tip: Ajax and Validations using jQuery &lt;/a&gt;demonstrates how we can use jQuery for Ajax and validation as well as demonstrating partial rendering using user control. Steve Sanderson's ( Author of Apress' ASP.NET MVC Book) &lt;a href="http://blog.codeville.net/" mce_href="http://blog.codeville.net/"&gt;Blog &lt;/a&gt;is damn worth to read. And I strongly recommend to visit &lt;a href="http://blog.wekeroad.com/" target="_blank" mce_href="http://blog.wekeroad.com/"&gt;Rob Conery’s blog&lt;/a&gt; for his storefront series.&amp;nbsp; He has been building an entire ecommerce application with ASP.NET MVC&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6691236" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/ShijuVBlog/~4/cIGgXhHCzdw" height="1" width="1"/&gt;</description><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/shijuvarghese/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><feedburner:origLink>http://weblogs.asp.net/shijuvarghese/archive/2008/10/20/asp-net-mvc-for-live-applications.aspx</feedburner:origLink></item></channel></rss>
