<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" 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/"><channel><title>Espresso Fueled Agile Development : patterns &amp;amp; practices</title><link>http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx</link><description>Tags: patterns &amp;amp; practices</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>If you missed the patterns &amp; practices summit....</title><link>http://blogs.msdn.com/mpuleio/archive/2008/12/04/if-you-missed-the-patterns-practices-summit.aspx</link><pubDate>Thu, 04 Dec 2008 12:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9174526</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/9174526.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=9174526</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=9174526</wfw:comment><description>&lt;P&gt;&lt;A target=_blank href="http://blogs.msdn.com/ajoyk" mce_href="http://blogs.msdn.com/ajoyk"&gt;Ajoy&lt;/A&gt; has posted that three of the sessions have been made available online at &lt;A target=_blank href="http://blogs.msdn.com/ajoyk/archive/2008/12/03/pnp-summit-videos-online.aspx" mce_href="http://blogs.msdn.com/ajoyk/archive/2008/12/03/pnp-summit-videos-online.aspx"&gt;pnp Summit videos online&lt;/A&gt;.&amp;nbsp; Since one of the three sessions is one that Grigori and I did about the Acceptance Testing Guide, &lt;A target=_blank href="http://wm.microsoft.com/ms/patterns-and-practices/2008-11-pnp-summit/acceptance-testing.wmv" mce_href="http://wm.microsoft.com/ms/patterns-and-practices/2008-11-pnp-summit/acceptance-testing.wmv"&gt;Driving Development with Acceptance Testing&lt;/A&gt;, I figured I'd share the information.&amp;nbsp; The other two sessions are Ade talking about distributed agile development, and a discussion with Ajoy on the new SharePoint guidance from p&amp;amp;p that I have mentioned before (&lt;A id=bp___ctl00___RecentPosts___postlist___EntryItems_ctl08_PostTitle href="http://blogs.msdn.com/mpuleio/archive/2008/08/13/guidance-on-sharepoint.aspx"&gt;&lt;FONT color=#006bad&gt;Guidance on SharePoint&lt;/FONT&gt;&lt;/A&gt;, &lt;A id=bp___ctl00___RecentPosts___postlist___EntryItems_ctl07_PostTitle href="http://blogs.msdn.com/mpuleio/archive/2008/08/22/unit-testing-sharepoint.aspx"&gt;&lt;FONT color=#006bad&gt;Unit testing SharePoint&lt;/FONT&gt;&lt;/A&gt;).&amp;nbsp; If you missed the Summit and want to attend next year in Redmond (or elsewhere), keep an eye on &lt;A href="http://www.pnpsummit.com/"&gt;http://www.pnpsummit.com/&lt;/A&gt;, which will eventually be updated with information on the next conference.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9174526" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Test+Engineering+Guidance/default.aspx">Acceptance Test Engineering Guidance</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Testing/default.aspx">Acceptance Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Who is using WCSF?</title><link>http://blogs.msdn.com/mpuleio/archive/2008/12/03/who-is-using-wcsf.aspx</link><pubDate>Wed, 03 Dec 2008 21:48:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9171225</guid><dc:creator>mpuleio</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/9171225.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=9171225</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=9171225</wfw:comment><description>&lt;p&gt;Blaine and I would like to ask the community to let us know &amp;quot;who is using WCSF?&amp;quot;&amp;#160; We know that WCSF has been fairly successful based on: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;WCSF has been downloaded a few times (ok, it is really many thousands of times) &lt;/li&gt;    &lt;li&gt;The discussion forums on CodePlex are fairly busy &lt;/li&gt;    &lt;li&gt;Direct customer engagement with a number of companies &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;However, there are a lot of folks who are using WCSF that we do not know about.&amp;#160; Since we get requests all the time about who is using WCSF, the size of projects, the size of dev teams, etc, we would love to collect some more data and statistics.&amp;#160; So, if you have used or are using WCSF on a project, let us know via comments, email, or discussions on CodePlex.&amp;#160; If you have stopped using it, please let us know why, so we can possibly address concerns.&lt;/p&gt;  &lt;p&gt;To make things simple, I have created a thread on the WCSF CodePlex discussion forum so you can easily provide feedback: &lt;a title="http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41405" href="http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41405"&gt;http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41405&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thanks. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9171225" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Web+Client+Software+Factory/default.aspx">Web Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Where is WCSF headed?</title><link>http://blogs.msdn.com/mpuleio/archive/2008/12/03/where-is-wcsf-headed.aspx</link><pubDate>Wed, 03 Dec 2008 21:24:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9171150</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/9171150.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=9171150</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=9171150</wfw:comment><description>&lt;p&gt;Blaine &amp;amp; I have been getting a lot of emails, messages, comments, etc about WCSF.&amp;#160; There are a lot of people interested in a public statement from patterns &amp;amp; practices about the roadmap for WCSF and future support of WCSF, in addition to the &amp;quot;normal&amp;quot; feature requests.&lt;/p&gt;  &lt;p&gt;Well, we have some good news: Blaine has publicly released the WCSF roadmap in his blog as &lt;a href="http://blogs.msdn.com/blaine/archive/2008/12/03/roadmap-for-wcsf.aspx"&gt;Roadmap for WCSF&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Basically, right now, we are asking for feedback from the community.&amp;#160; Let Blaine and/or I know what you want via our blogs, email, or the WCSF CodePlex site at &lt;a href="http://www.codeplex.com/websf"&gt;www.codeplex.com/websf&lt;/a&gt;.&amp;#160; You can also create work items/ issues on the WCSF CodePlex site and have people vote on them (&lt;a title="http://www.codeplex.com/websf/WorkItem/List.aspx" href="http://www.codeplex.com/websf/WorkItem/List.aspx"&gt;http://www.codeplex.com/websf/WorkItem/List.aspx&lt;/a&gt;).&amp;#160; &lt;/p&gt;  &lt;p&gt;Thanks in advance for the feedback...&lt;/p&gt;  &lt;p&gt;[Edit: I created a specific thread on the CodePlex discussions board to facilitate feedback: &lt;a title="http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41403" href="http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41403"&gt;http://www.codeplex.com/websf/Thread/View.aspx?ThreadId=41403&lt;/a&gt;). Enjoy]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9171150" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Web+Client+Software+Factory/default.aspx">Web Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Back from vacation... and a lot has happened in the last week</title><link>http://blogs.msdn.com/mpuleio/archive/2008/11/03/back-from-vacation-and-a-lot-has-happened-in-the-last-week.aspx</link><pubDate>Mon, 03 Nov 2008 22:48:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9034750</guid><dc:creator>mpuleio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/9034750.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=9034750</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=9034750</wfw:comment><description>&lt;p&gt;I took a week off, which was good.&amp;nbsp; I visited family and spent time relaxing and playing video games. (Fallout3 rocks so far!!).&amp;nbsp; I got back this morning to hundreds of emails to go through.&amp;nbsp; After reading almost all of it, there were a few things that happened recently I wanted to share... Here are the highlights:&lt;/p&gt; &lt;p&gt;Grigori and I have been working (with Gerard and Jon) on the Acceptance Testing Guide...and we released a beta.&amp;nbsp; (Grigori talks about it here: &lt;a href="http://blogs.msdn.com/agile/archive/2008/10/31/news-acceptance-test-engineering-guidance-beta1-and-other-great-releases.aspx"&gt;News: Acceptance Test Engineering Guidance BETA1&lt;/a&gt;, and the guide is under Releases here: &lt;a href="http://codeplex.com/TestingGuidance"&gt;http://codeplex.com/TestingGuidance&lt;/a&gt;).&amp;nbsp; We would appreciate feedback.&lt;/p&gt; &lt;p&gt;Unity 1.2 and Enterprise Library 4.1 were both released.&amp;nbsp; Way to go Chris, Grigori, and the rest of the team. (&lt;a href="http://blogs.msdn.com/agile/archive/2008/10/28/just-released-microsoft-enterprise-library-4-1-and-unity-1-2.aspx"&gt;Just Released: Microsoft Enterprise Library 4.1 and Unity 1.2&lt;/a&gt; and &lt;a href="http://www.tavaresstudios.com/Blog/post/And-were-live!-Entlib-41-and-Unity-12-are-released.aspx"&gt;And we're live! Entlib 4.1 and Unity 1.2 are released.&lt;/a&gt;)&amp;nbsp; Unity had some very neat (and hard to implement) stuff added to it in this release.&amp;nbsp; I know since I paired with Chris on a small part of re-work that allowed the Policy Injection Block functionality to be added.&amp;nbsp; This is a good, solid release of both projects.&lt;/p&gt; &lt;p&gt;p&amp;amp;p opened up the &lt;em&gt;patterns &amp;amp; practices&lt;/em&gt; &lt;a href="http://msdn.microsoft.com/en-us/dd128747.aspx"&gt;Agile Development Showcase&lt;/a&gt;, starting with a paper Ade wrote on &lt;strong&gt;&lt;a href="http://download.microsoft.com/download/4/4/a/44a2cebd-63fb-4379-898d-9cf24822c6cc/distributed_agile_development_at_microsoft_patterns_and_practices.pdf"&gt;Distributed Agile Development at Microsoft patterns &amp;amp; practices&lt;/a&gt;&lt;/strong&gt;.&amp;nbsp; I reviewed the paper and bounced ideas around with Ade.&amp;nbsp; The paper has a LOT of information and helpful hints. (Ade's blog post about it is here: &lt;a href="http://www.ademiller.com/blogs/tech/2008/10/patterns-practices-agile-showcase/"&gt;patterns &amp;amp; practices Agile Showcase&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;The Redmond patterns &amp;amp; practices Summit is this week (&lt;a title="http://www.pnpsummit.com/" href="http://www.pnpsummit.com/"&gt;http://www.pnpsummit.com/&lt;/a&gt;).&amp;nbsp; I've got to prep for a talk tomorrow after being out for a week (fun).&amp;nbsp; Here are a few other random posts on the topic: &lt;a href="http://www.ademiller.com/blogs/tech/2008/11/patterns-practices-summit-in-redmond/"&gt;patterns &amp;amp; practices Summit in Redmond&lt;/a&gt;, &lt;a href="http://www.peterprovost.org/blog/post/Crazy-Times-Ahead-PDC-Pamp3bP-Summit-Tech-Ed-EMEA.aspx"&gt;Crazy Times Ahead - PDC, P&amp;amp;P Summit, Tech Ed EMEA&lt;/a&gt;).&amp;nbsp; The Summit is always fun, and I am looking forward to it.&lt;/p&gt; &lt;p&gt;After the Summit, I'll be ramping down on the Acceptance Testing project now that the Beta is out.&amp;nbsp; I will continue to work on it, just not as my primary focus, as it gets cleaned up, reviewed, re-worked, edited, etc.&amp;nbsp; I'll blog soon about my next challenge.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9034750" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Unity/default.aspx">Unity</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Test+Engineering+Guidance/default.aspx">Acceptance Test Engineering Guidance</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Testing/default.aspx">Acceptance Testing</category></item><item><title>How to migrate from CAB/SCSF to Composite WPF</title><link>http://blogs.msdn.com/mpuleio/archive/2008/10/14/how-to-migrate-from-cab-scsf-to-composite-wpf.aspx</link><pubDate>Tue, 14 Oct 2008 20:12:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8998323</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8998323.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8998323</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8998323</wfw:comment><description>&lt;p&gt;Blaine recently posted that there is a &lt;a target="_blank" href="http://blogs.msdn.com/blaine/archive/2008/09/30/cab-to-prism-comparison-available-on-codeplex.aspx"&gt;CAB to Prism Comparison Available on Codeplex&lt;/a&gt;.&amp;nbsp; This links to &lt;a target="_blank" href="http://www.codeplex.com/CompositeWPF/Release/ProjectReleases.aspx?ReleaseId=16941"&gt;Composite Application Guidance for CAB Developers&lt;/a&gt;, a download from the CompositeWPF community site.&lt;/p&gt; &lt;p&gt;While this document does not help you decide &lt;strong&gt;IF&lt;/strong&gt;[*]&lt;strong&gt; &lt;/strong&gt;you should switch from &lt;a target="_blank" href="http://www.codeplex.com/smartclient"&gt;CAB/SCSF&lt;/a&gt; to &lt;a target="_blank" href="http://www.codeplex.com/CompositeWPF"&gt;CompositeWPF&lt;/a&gt;, it does help with &lt;strong&gt;HOW&lt;/strong&gt;, the differences between the two coding models, where the WorkItem went, how to emulate the behavior of WorkItems, and a few other interesting things.&amp;nbsp; I&lt;em&gt;f you are a CAB developer considering the transition to WPF, you should definitely read this.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;[*] Deciding which to use should be fairly simple:&amp;nbsp; If you already know CAB/SCSF and you need to work in Windows Forms, stick with CAB/SCSF.&amp;nbsp; If you need to host some WPF widgets in a Windows Forms environment, use CAB/SCSF.&amp;nbsp; If you need a full WPF stack, use the Composite WPF guidance.&amp;nbsp; If you are not constrained by the technology choice, things get tricky and the decision should factor in a whole bunch of factors including (but not limited to) which framework you are more comfortable in, which your team is more comfortable with, and where you see future investments in technology going.&amp;nbsp; For each team/group/organization/company this is a different decision with different factors to consider.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8998323" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Smart+Client+Software+Factory/default.aspx">Smart Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Windows+Forms/default.aspx">Windows Forms</category></item><item><title>Finally, a common Service Locator</title><link>http://blogs.msdn.com/mpuleio/archive/2008/10/13/finally-a-common-service-locator.aspx</link><pubDate>Mon, 13 Oct 2008 20:03:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8998296</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8998296.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8998296</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8998296</wfw:comment><description>&lt;p&gt;I know that this is old news by now, but &lt;a target="_blank" href="http://www.tavaresstudios.com/Blog/"&gt;Chris Tavares&lt;/a&gt;, &lt;a target="_blank" href="http://blogs.msdn.com/gblock/default.aspx"&gt;Glenn Block&lt;/a&gt;, and a few others around here have been working with a number of folks from the wider .NET community to create a common wrapper for IoC containers.&amp;nbsp; Chris &amp;amp; Glenn created a community site (&lt;a title="http://www.codeplex.com/CommonServiceLocator" href="http://www.codeplex.com/CommonServiceLocator"&gt;http://www.codeplex.com/CommonServiceLocator&lt;/a&gt;) and shipped it about two weeks ago (&lt;a title="http://www.codeplex.com/CommonServiceLocator/Release/ProjectReleases.aspx?ReleaseId=17694" href="http://www.codeplex.com/CommonServiceLocator/Release/ProjectReleases.aspx?ReleaseId=17694"&gt;http://www.codeplex.com/CommonServiceLocator/Release/ProjectReleases.aspx?ReleaseId=17694&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;Here are a few more posts about it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.tavaresstudios.com/Blog/post/Announcing-The-IServiceLocator-interface.aspx"&gt;Announcing: The IServiceLocator interface&lt;/a&gt;  &lt;li&gt;&lt;a target="_blank" href="http://blogs.msdn.com/gblock/archive/2008/10/02/iservicelocator-a-step-toward-ioc-container-service-locator-detente.aspx"&gt;IServiceLocator a step toward IoC container / Service locator detente&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The interface itself is pretty darned simple, and creating a wrapper around any IoC implementation should be pretty darned simple.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Personally, I think this is great, as it will allow us developers at p&amp;amp;p a way to easily create guidance using DI/IoC without tying our users to a particular container implementation, which has been a long requested feature. I know Prism did a great job with this concept already, and created their own facade, but this is a further step in the right direction as the broader DI/IoC community seems to be behind it.&amp;nbsp; When/If I get a chance to work on WCSF again, I'll definitely go about hiding the container behind this interface.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8998296" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Unity/default.aspx">Unity</category></item><item><title>Acceptance Test Engineering guide Alpha Available</title><link>http://blogs.msdn.com/mpuleio/archive/2008/08/27/acceptance-test-engineering-guide-alpha-available.aspx</link><pubDate>Wed, 27 Aug 2008 21:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8900963</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8900963.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8900963</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8900963</wfw:comment><description>&lt;p&gt;Last night I posted the &lt;a href="http://www.codeplex.com/TestingGuidance/Release/ProjectReleases.aspx?ReleaseId=16696" target="_blank"&gt;Alpha version of &lt;em&gt;Acceptance Test Engineering guide - How to Decide if Software is Ready for You or Your Customer&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;to the &lt;a href="http://www.codeplex.com/TestingGuidance" target="_blank"&gt;Acceptance Test Engineering CodePlex community site&lt;/a&gt;.&amp;nbsp; There are 300+ pages of content.&amp;nbsp; It is still a bit rough, has some gaps in it, and needs some work, but there is a lot of good information too.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I would ask for some help from the public (developers, testers, PMs, and folks who act as customers or sponsor software projects): Read the &lt;a href="http://www.codeplex.com/TestingGuidance/Release/ProjectReleases.aspx?ReleaseId=16696" target="_blank"&gt;Alpha&lt;/a&gt; (or just part of it) and reply to the &lt;a href="http://www.codeplex.com/TestingGuidance/Thread/View.aspx?ThreadId=34340" target="_blank"&gt;Feedback Discussion&lt;/a&gt; with anything you think we got wrong, anything we got right, or anything we missed entirely.&amp;nbsp; Thanks.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8900963" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Test+Engineering+Guidance/default.aspx">Acceptance Test Engineering Guidance</category></item><item><title>Unit testing SharePoint</title><link>http://blogs.msdn.com/mpuleio/archive/2008/08/22/unit-testing-sharepoint.aspx</link><pubDate>Sat, 23 Aug 2008 00:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8888899</guid><dc:creator>mpuleio</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8888899.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8888899</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8888899</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/francischeung" target="_blank"&gt;Francis&lt;/a&gt; has an article on &lt;a href="http://blogs.msdn.com/francischeung/archive/2008/08/22/unit-testing-sharepoint-2007-applications.aspx" target="_blank"&gt;Unit Testing SharePoint 2007 Applications&lt;/a&gt;&lt;/p&gt; &lt;p&gt;He also did a brownbag talk on this yesterday, which was very interesting and brought up a few big challenges and ways to work around them.&lt;/p&gt; &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8888899" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Example+Driven+Design+_2800_Formerly+TDD_2900_/default.aspx">Example Driven Design (Formerly TDD)</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Guidance on SharePoint</title><link>http://blogs.msdn.com/mpuleio/archive/2008/08/13/guidance-on-sharepoint.aspx</link><pubDate>Thu, 14 Aug 2008 01:38:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8861663</guid><dc:creator>mpuleio</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8861663.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8861663</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8861663</wfw:comment><description>&lt;p&gt;You all might be amazed by the number of emails, messages, and calls I get asking for any of the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Guidance on SharePoint&lt;/li&gt; &lt;li&gt;Requests to add SharePoint Guidance to WCSF&lt;/li&gt; &lt;li&gt;Requests to add "Office applications" support to SCSF&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Well, I can finally help out folks looking for guidance on how to build SharePoint applications by saying "go check out the CodePlex project for &lt;a href="http://www.codeplex.com/spg"&gt;patterns &amp;amp; practices SharePoint Guidance&lt;/a&gt; (&lt;a title="http://www.codeplex.com/spg" href="http://www.codeplex.com/spg"&gt;http://www.codeplex.com/spg&lt;/a&gt;)."&amp;nbsp; If you are hoping for SharePoint support in WCSF, you should probably check this out too.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blaine/" target="_blank"&gt;Blaine&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/francischeung/" target="_blank"&gt;Francis&lt;/a&gt; are leading the effort on this project.&amp;nbsp; I understand that they are tackling a few big challenges that customers have ranked as the most important including (this list is from the project's &lt;a href="http://www.codeplex.com/spg/Release/ProjectReleases.aspx?ReleaseId=15819" target="_blank"&gt;Vision Scope slide deck&lt;/a&gt;): &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Unit testing and debugging&lt;/li&gt; &lt;li&gt;Packaging and deployment&lt;/li&gt; &lt;li&gt;Setting up a team development environment&lt;/li&gt; &lt;li&gt;Unclear which SharePoint features/ components to use and when&lt;/li&gt; &lt;li&gt;Solution maintenance/upgrade&lt;/li&gt; &lt;li&gt;How and when is SharePoint Designer applicable&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you do SharePoint development, you should check it out.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8861663" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Web+Client+Software+Factory/default.aspx">Web Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Smart+Client+Software+Factory/default.aspx">Smart Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>See Real Results With patterns &amp; practices</title><link>http://blogs.msdn.com/mpuleio/archive/2008/08/12/see-real-results-with-patterns-practices.aspx</link><pubDate>Wed, 13 Aug 2008 01:38:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8854135</guid><dc:creator>mpuleio</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8854135.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8854135</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8854135</wfw:comment><description>&lt;p&gt;I visited the &lt;a href="http://msdn.com/practices" target="_blank"&gt;p&amp;amp;p homepage on MSDN&lt;/a&gt; today, and saw an announcement for a research report by Nucleus Research about patterns &amp;amp; practices, and what companies that use our guidance think the benefits are.&amp;nbsp; Check out &lt;a href="http://msdn.microsoft.com/en-us/practices/cc507505.aspx" target="_blank"&gt;See Real Results With patterns &amp;amp; practices&lt;/a&gt; (an overview) and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3696068D-BE4A-4731-AB15-492377AA4C6D&amp;amp;displaylang=en" target="_blank"&gt;download and read the full report&lt;/a&gt;.&amp;nbsp; As a member of p&amp;amp;p I thought it was informative and showed a few areas that we can improve.&amp;nbsp; It also showed areas where customers have reaped big benefits from using p&amp;amp;p deliverables, which I would be interested in if I were "out in the real world" and looking to re-use one of the p&amp;amp;p application blocks or an open source alternative.&amp;nbsp; To borrow a few lines from the report:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;"THE BOTTOM LINE&lt;/strong&gt;&lt;br&gt;Companies use Microsoft patterns and practices to make their development environments more productive, consistent, and standardized.&amp;nbsp; Whether used by an independent software vendor, consultancy, or enterprise, patterns and practices can accelerate project cycle times, reduce costs, and shift application development efforts away from code building and toward maximizing business benefits." &lt;/p&gt; &lt;p align="right"&gt;&lt;font size="1"&gt;-- &lt;em&gt;Guidebook: Microsoft patterns &amp;amp; practices&lt;/em&gt;, Nucleus Research Inc., April 2008, &lt;br&gt;&lt;/font&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyId=3696068D-BE4A-4731-AB15-492377AA4C6D&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3696068D-BE4A-4731-AB15-492377AA4C6D&amp;amp;displaylang=en"&gt;&lt;font size="1"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=3696068D-BE4A-4731-AB15-492377AA4C6D&amp;amp;displaylang=en&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8854135" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>Acceptance Testing Guide Community Preview 2 Available!</title><link>http://blogs.msdn.com/mpuleio/archive/2008/08/04/acceptance-testing-guide-community-preview-2-available.aspx</link><pubDate>Mon, 04 Aug 2008 20:16:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8831602</guid><dc:creator>mpuleio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8831602.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8831602</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8831602</wfw:comment><description>&lt;p&gt;As I have mentioned before in a few posts (&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/04/18/acceptance-test-engineering-guidance.aspx"&gt;Acceptance Test Engineering Guidance&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/05/18/acceptance-testing-guidance-survey.aspx"&gt;Acceptance Testing Guidance Survey&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/07/10/acceptance-testing-guide-update.aspx"&gt;Acceptance Testing Guide Update&lt;/a&gt;), I am working with a team on &lt;a href="http://www.codeplex.com/TestingGuidance" target="_blank"&gt;guidance around acceptance testing&lt;/a&gt;.&amp;nbsp; We still have a lot of work to do our the guide, but we have made available a &lt;a href="http://www.codeplex.com/TestingGuidance/Release/ProjectReleases.aspx?ReleaseId=15941" target="_blank"&gt;second community preview&lt;/a&gt; to show you how things are shaping up and to give you a chance to provide feedback.&lt;/p&gt; &lt;p&gt;Check these out:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/TestingGuidance" target="_blank"&gt;The Acceptance Test Engineering Guidance community site on CodePlex&lt;/a&gt; (so you can follow the project)&lt;/li&gt; &lt;li&gt;&lt;a href="javascript:window.location.href='http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=TestingGuidance&amp;amp;DownloadId=40458';" target="_blank"&gt;An announcement about the guide&lt;/a&gt; (which is being handed out at the Agile 2008 conference this week)&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/TestingGuidance/Release/ProjectReleases.aspx?ReleaseId=15941" target="_blank"&gt;The second community preview of the guide&lt;/a&gt; (it is a bit rough, but you should be able to see where we are headed with it)&lt;/li&gt; &lt;li&gt;Provide &lt;a href="http://www.codeplex.com/TestingGuidance/Thread/View.aspx?ThreadId=32829" target="_blank"&gt;Feedback on Community Preview Aug 4, 2008&lt;/a&gt; (so we can make changes, add topics we missed, etc).&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8831602" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Test+Engineering+Guidance/default.aspx">Acceptance Test Engineering Guidance</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Testing/default.aspx">Acceptance Testing</category></item><item><title>Composite Application Guidance for WPF Shipped!</title><link>http://blogs.msdn.com/mpuleio/archive/2008/07/31/composite-application-guidance-for-wpf-shipped.aspx</link><pubDate>Thu, 31 Jul 2008 20:26:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8793821</guid><dc:creator>mpuleio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8793821.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8793821</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8793821</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;A while back, I was Dev Lead on the Smart Client Software Factory (SCSF) when we added the ability to host WPF controls in a Composite Application Block (CAB) application. Since then, the thinking in the WPF space has changed a bit, and p&amp;amp;p decided that offering guidance on full WPF applications was a good idea.&amp;nbsp; &lt;a href="http://blogs.msdn.com/blaine" target="_blank"&gt;Blaine&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/francischeung" target="_blank"&gt;Francis&lt;/a&gt;, Bob, and &lt;a href="http://blogs.msdn.com/gblock" target="_blank"&gt;Glenn&lt;/a&gt; have worked with a great team to create guidance for building composite applications using WPF. This guidance was started from a clean slate, as there are enough differences between Windows Forms and WPF (as we learned doing SCSF) to cause challenges.&amp;nbsp; The result is the &lt;a href="http://msdn.microsoft.com/en-us/library/cc707819.aspx" target="_blank"&gt;Composite Application Guidance for WPF June 2008&lt;/a&gt;, which recently shipped (formerly code-named &lt;a href="http://codeplex.com/CompositeWPF" target="_blank"&gt;Prism&lt;/a&gt;).&amp;nbsp; This guidance is simple, easy to consume, can be used piecemeal, and should not have the steep learning curve that CAB and SCSF have.&amp;nbsp; You can learn more at the &lt;a href="http://codeplex.com/CompositeWPF" target="_blank"&gt;Prism CodePlex Community Site&lt;/a&gt;, or at any of the places below.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Check out Francis's post, &lt;a href="http://blogs.msdn.com/francischeung/archive/2008/07/17/shipped-composite-application-guidance-for-wpf-june-2008.aspx" target="_blank"&gt;SHIPPED!!! Composite Application Guidance for WPF June 2008&lt;/a&gt;, for details and where to get it.&lt;/p&gt; &lt;p&gt;Or take a look at Glenn's post on the subject: &lt;a href="http://blogs.msdn.com/gblock/archive/2008/07/03/composite-application-guidance-is-live.aspx"&gt;Composite Application Guidance is Live&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And here are a few other posts about what they have been up to, by person in chronological order:&lt;/p&gt; &lt;p&gt;From Francis:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/01/28/composite-wpf-guidance.aspx"&gt;Composite WPF Guidance&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/01/28/di-or-not-di.aspx"&gt;DI or not DI&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/05/29/decoupled-communication-with-prism-intro.aspx"&gt;Decoupled Communication with Prism (intro)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/05/29/decoupled-communication-with-prism-shared-views-services.aspx"&gt;Decoupled Communication with Prism (Shared Services)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/05/30/decoupled-communication-with-prism-commanding.aspx"&gt;Decoupled Communication with Prism (Commanding)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/06/02/decoupled-communication-with-prism-event-aggregation.aspx"&gt;Decoupled Communication with Prism (Event Aggregation)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/06/16/poor-man-s-ui-composition.aspx"&gt;Poor man's UI Composition&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/francischeung/archive/2008/07/16/activeaware-views-and-commands.aspx"&gt;ActiveAware Views and Commands&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;From Blaine:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/blaine/archive/2008/05/15/track-prim-project.aspx"&gt;Track Prism project&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/blaine/archive/2008/06/08/loosely-couple-communication.aspx"&gt;Loosely coupled communication&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;From Glenn:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/03/12/prism-launches-on-codeplex.aspx"&gt;'Prism' launches on CodePlex&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/03/12/prism-ri-first-drop.aspx"&gt;'Prism' RI first drop&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/03/26/prism-drop-2.aspx"&gt;Prism Drop 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/04/01/prism-talk-at-wpf-bootcamp.aspx"&gt;Prism talk at WPF Bootcamp&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/04/27/the-prism-team-and-how-we-develop.aspx"&gt;The Prism team and how we develop&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/04/29/brian-noyes-thoughts-on-prism.aspx"&gt;Brian Noyes thoughts on Prism&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/05/05/prismshouldnotreferenceunity.aspx"&gt;PrismShouldNotReferenceUnity&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/05/08/prism-vs-framework-xxx.aspx"&gt;Prism vs Framework XXX&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/05/08/wpf-from-this-to-that-wow.aspx"&gt;WPF, from this to that..Wow!&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/05/11/prism-cab-and-winforms-futures.aspx"&gt;Prism, CAB, and WinForms futures&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/05/24/using-viewmodels-and-datatemplates-to-compose-your-ui.aspx"&gt;Using ViewModels and DataTemplates to compose your UI&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/06/04/loosely-coupled-communication-prism-style.aspx"&gt;Loosely coupled communication - Prism style&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/06/12/stocktrader-ri-using-castle-windsor.aspx"&gt;StockTrader RI using Castle Windsor&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/06/30/composite-application-guidance-time-to-ship.aspx"&gt;Composite Application Guidance, time to ship&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/06/30/talking-about-prism-with-infoq.aspx"&gt;Talking about Prism with InfoQ&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/07/01/how-prism-supports-using-multiple-ioc-containers.aspx"&gt;How Prism supports using multiple IOC containers&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/07/02/composite-application-guidance-what-is-it.aspx"&gt;Composite Application Guidance - What is it?&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2008/07/03/composite-application-guidance-is-live.aspx"&gt;Composite Application Guidance is Live&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I know I am looking forward to using this guidance when I get a chance to work with WPF more seriously.&lt;/p&gt; &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8793821" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Smart+Client+Software+Factory/default.aspx">Smart Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Proof of Concept: a simple DI solution for ASP.NET WebForms</title><link>http://blogs.msdn.com/mpuleio/archive/2008/07/17/proof-of-concept-a-simple-di-solution-for-asp-net-webforms.aspx</link><pubDate>Thu, 17 Jul 2008 23:32:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8744912</guid><dc:creator>mpuleio</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8744912.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8744912</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8744912</wfw:comment><description>&lt;p&gt;&lt;a href="http://www.tavaresstudios.com/Blog/" target="_blank"&gt;Chris Tavares&lt;/a&gt; and I were chatting yesterday morning about an idea Chris had: building a simple, reusable Http Module that gives folks DI scoped to the Application, Session, and Request.&amp;nbsp; Yesterday afternoon, during the p&amp;amp;p Dev team's weekly "Code Kata" we threw together a spike/proof of concept in a couple of hours.&amp;nbsp; "Code Kata" is a three hour block of time that the p&amp;amp;p Dev team uses for a number of things: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;cross-project pollination of ideas, things that work, things that don't work across project teams &lt;li&gt;investigating new and emerging technologies that p&amp;amp;p may work with in the future  &lt;li&gt;investigating new and emerging platforms to determine if p&amp;amp;p may want to provide guidance in the future  &lt;li&gt;play with new shiny bits :-)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There are no unit tests, just simple acceptance tests written as a really simple web site.&amp;nbsp; If the site works and shows the right text, the test passes.&amp;nbsp; We started with a list of requirements (scaled to just the application level) on the whiteboard that looked sort of like this (which I am creating from memory):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Create a DI container for the application  &lt;li&gt;Create a way to get to the container ( we choose an extension method on the Application class)  &lt;li&gt;Allow a way to configure the container  &lt;li&gt;Allow DI to work for pages  &lt;li&gt;Allow DI to work for user controls  &lt;li&gt;Allow DI to work for master pages  &lt;li&gt;Allow DI to work for ASMX web services  &lt;li&gt;Allow the above functionality in a simple and self contained way&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, we created a simple Web Site Application and a DLL to hold the custom HttpModule.&amp;nbsp; We created a simple web page that needed a property injected into it.&amp;nbsp; We then wrote the code to make my "test" page work properly.&amp;nbsp; First we wrote an extension method for HttpApplication.&amp;nbsp; After a short bit it changed to one for HttpApplicationState: &lt;/p&gt; &lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web;
&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Practices.Unity;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;UnityForTheWebLib
{
    &lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: #2b91af"&gt;HttpApplicationStateExtensions
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;private const string &lt;/span&gt;GlobalContainerKey = &lt;span style="color: #a31515"&gt;"Your global Unity container"&lt;/span&gt;;

        &lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IUnityContainer &lt;/span&gt;GetContainer(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;HttpApplicationState &lt;/span&gt;application)
        {
            application.Lock();
            &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue"&gt;try
            &lt;/span&gt;{
                &lt;span style="color: #2b91af"&gt;IUnityContainer &lt;/span&gt;container = application[GlobalContainerKey] &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IUnityContainer&lt;/span&gt;;
                &lt;span style="color: blue"&gt;if&lt;/span&gt;(container == &lt;span style="color: blue"&gt;null&lt;/span&gt;)
                {
                    container = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;UnityContainer&lt;/span&gt;();
                    application[GlobalContainerKey] = container;
                }
                &lt;span style="color: blue"&gt;return &lt;/span&gt;container;
            }
            &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: blue"&gt;finally
            &lt;/span&gt;{
                application.UnLock();
            }
        }
    }
}&lt;/font&gt;&lt;/font&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Basically, we have lazy initialization of the container and a mechanism to stuff it into the application state.&amp;nbsp; And then the initial HttpModule that only does injection on a Page:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web.UI;
&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Practices.Unity;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;UnityForTheWebLib
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;UnityHttpModule &lt;/span&gt;: &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: #2b91af"&gt;IHttpModule
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;#region &lt;/span&gt;IHttpModule Members

        &lt;/font&gt;&lt;/font&gt;&lt;span style="color: gray"&gt;&lt;font face="con" size="2"&gt;///&amp;lt;summary&amp;gt;
        ///&lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="con" size="2"&gt;Initializes a module and prepares it to handle requests.
        &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;/summary&amp;gt;
        ///
        ///&amp;lt;param name="context"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;An &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;see cref="T:System.Web.HttpApplication"&amp;gt;&amp;lt;/see&amp;gt; &lt;/span&gt;&lt;span style="color: green"&gt;that provides access to the methods, properties, and events common to all application objects within an ASP.NET application &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;
        &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Init(&lt;span style="color: #2b91af"&gt;HttpApplication &lt;/span&gt;context)
        {
            context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
        }

        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;summary&amp;gt;
        ///&lt;/span&gt;&lt;span style="color: green"&gt;Disposes of the resources (other than memory) used by the module that implements &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;see cref="T:System.Web.IHttpModule"&amp;gt;&amp;lt;/see&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: green"&gt;&lt;font face="con" size="2"&gt;.
        &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;/summary&amp;gt;
        ///
        &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Dispose()
        {
        }

        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: blue"&gt;#endregion

        private void &lt;/span&gt;OnPreRequestHandlerExecute(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)
        {
            &lt;span style="color: #2b91af"&gt;IHttpHandler &lt;/span&gt;handler = &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Handler;
            &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Application.GetContainer().BuildUp(handler.GetType(), handler);
        }
    }
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This is a very simple module that calls BuildUp on the page.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;At this point we added another test, and implemented it.&amp;nbsp; After a few iterations of this we ended up with tests for injection into a User Control and a Master Page, an interface that needed to be configured on the container.&amp;nbsp; The final implementation of the Http Module looks like this &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;&lt;br&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web;&lt;br&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web.UI;&lt;br&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Practices.Unity;&lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;namespace &lt;/span&gt;UnityForTheWebLib&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;UnityHttpModule &lt;/span&gt;: &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: #2b91af"&gt;IHttpModule&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;#region &lt;/span&gt;IHttpModule Members&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;span style="color: gray"&gt;&lt;font face="con" size="2"&gt;///&amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="con" size="2"&gt;Initializes a module and prepares it to handle requests.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;/summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&amp;lt;param name="context"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;An &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;see cref="T:System.Web.HttpApplication"&amp;gt;&amp;lt;/see&amp;gt; &lt;/span&gt;&lt;span style="color: green"&gt;that provides access to the methods, properties, and events common to all application objects within an ASP.NET application &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Init(&lt;span style="color: #2b91af"&gt;HttpApplication &lt;/span&gt;context)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;/span&gt;&lt;span style="color: green"&gt;Disposes of the resources (other than memory) used by the module that implements &lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;see cref="T:System.Web.IHttpModule"&amp;gt;&amp;lt;/see&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: green"&gt;&lt;font face="con" size="2"&gt;.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: gray"&gt;///&amp;lt;/summary&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ///&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;public void &lt;/span&gt;Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: blue"&gt;#endregion&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void &lt;/span&gt;OnPreRequestHandlerExecute(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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: #2b91af"&gt;IHttpHandler &lt;/span&gt;handler = &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Handler;&lt;br&gt;&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: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Application.GetContainer().BuildUp(handler.GetType(), handler);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: green"&gt;// User Controls are ready to be built up after the page initialization is complete&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Page &lt;/span&gt;page = &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Handler &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;;&lt;br&gt;&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: blue"&gt;if &lt;/span&gt;(page != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; page.InitComplete += OnPageInitComplete;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: green"&gt;// Get the controls in the page's control tree excluding the page itself&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;private &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Control&lt;/span&gt;&amp;gt; GetControlTree(&lt;span style="color: #2b91af"&gt;Control &lt;/span&gt;root)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Control &lt;/span&gt;child &lt;span style="color: blue"&gt;in &lt;/span&gt;root.Controls)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; &lt;span style="color: blue"&gt;yield return &lt;/span&gt;child;&lt;br&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; &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Control &lt;/span&gt;c &lt;span style="color: blue"&gt;in &lt;/span&gt;GetControlTree(child))&lt;br&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; {&lt;br&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="color: blue"&gt;yield return &lt;/span&gt;c;&lt;br&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; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: green"&gt;// Build up each control in the page's control tree&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;OnPageInitComplete(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&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: #2b91af"&gt;Page &lt;/span&gt;page = (&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;) sender;&lt;br&gt;&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: #2b91af"&gt;IUnityContainer &lt;/span&gt;container = &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Application.GetContainer();&lt;br&gt;&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: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Control &lt;/span&gt;c &lt;span style="color: blue"&gt;in &lt;/span&gt;GetControlTree(page))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&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; container.BuildUp(c.GetType(), c);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Configuration of the container can happen in the Global Application_Start handler like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Practices.Unity;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;UnityForTheWebTestSite
{
    &lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Global &lt;/span&gt;: System.Web.&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="con"&gt;&lt;span style="color: #2b91af"&gt;HttpApplication
    &lt;/span&gt;{

        &lt;span style="color: blue"&gt;protected void &lt;/span&gt;Application_Start(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af"&gt;EventArgs &lt;/span&gt;e)
        {
            &lt;span style="color: #2b91af"&gt;IUnityContainer &lt;/span&gt;c = Application.GetContainer();
            c.RegisterType&amp;lt;&lt;span style="color: #2b91af"&gt;IControlData&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ControlData1&lt;/span&gt;&amp;gt;();
        }
    }
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;So, from the initial requirements we have this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strike&gt;Create a DI container for the application&lt;/strike&gt; &lt;strong&gt;Lazy initialization&lt;/strong&gt; 
&lt;li&gt;&lt;strike&gt;Create a way to get to the container ( we choose an extension method on the Application class) &lt;/strike&gt;&lt;strong&gt;Extension Method&lt;/strong&gt; 
&lt;li&gt;&lt;strike&gt;Allow a way to configure the container&lt;/strike&gt; &lt;strong&gt;Application Start&lt;/strong&gt; 
&lt;li&gt;&lt;strike&gt;Allow DI to work for pages&lt;/strike&gt;&amp;nbsp; &lt;strong&gt;Add the HttpModule and Attributes&lt;/strong&gt; 
&lt;li&gt;&lt;strike&gt;Allow DI to work for user controls &lt;/strike&gt;&lt;strong&gt;Add the HttpModule and Attributes&lt;/strong&gt; 
&lt;li&gt;&lt;strike&gt;Allow DI to work for master pages &lt;/strike&gt;&lt;strong&gt;Add the HttpModule and Attributes&lt;/strong&gt; 
&lt;li&gt;Allow DI to work for ASMX web services 
&lt;li&gt;&lt;strike&gt;Allow the above functionality in a simple and self contained way&lt;/strike&gt; &lt;strong&gt;This is all in a single module&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;We met the last requirement (simple and self contained) since all we did to the web application was add a single line to the web config.&amp;nbsp; That met the requirement. 
&lt;p&gt;The last area is one we met, but we are not happy with the solution.&amp;nbsp; Basically, we need to do a bit more research and see if there is a way to get into the pipeline for an ASMX request early enough to do injection and not screw things up for the normal use case or the Ajax extensions.&amp;nbsp; Until we get this figured out right, the solution is to have your Web Service constructor ask the container to do injection.&amp;nbsp; This is an ugly hack and looks something like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="code"&gt;&lt;font size="2"&gt;&lt;font face="consol"&gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;System.ComponentModel;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web;
&lt;span style="color: blue"&gt;using &lt;/span&gt;System.Web.Services;
&lt;span style="color: blue"&gt;using &lt;/span&gt;Microsoft.Practices.Unity;

&lt;span style="color: blue"&gt;namespace &lt;/span&gt;UnityForTheWebTestSite
{&lt;/font&gt;&lt;/font&gt;&lt;span style="color: gray"&gt;
&lt;font face="consol" size="2"&gt;    &lt;/font&gt;&lt;/span&gt;&lt;font face="consol" size="2"&gt;[&lt;span style="color: #2b91af"&gt;WebService&lt;/span&gt;(Namespace = &lt;span style="color: #a31515"&gt;"http://tempuri.org/"&lt;/span&gt;)]
    [&lt;span style="color: #2b91af"&gt;WebServiceBinding&lt;/span&gt;(ConformsTo = &lt;span style="color: #2b91af"&gt;WsiProfiles&lt;/span&gt;.BasicProfile1_1)]
    [&lt;span style="color: #2b91af"&gt;ToolboxItem&lt;/span&gt;(&lt;span style="color: blue"&gt;false&lt;/span&gt;)]
    &lt;/font&gt;&lt;font size="2"&gt;&lt;font face="consol"&gt;&lt;span style="color: green"&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    &lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;MyWebService &lt;/span&gt;: System.Web.Services.&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="consol"&gt;&lt;span style="color: #2b91af"&gt;WebService
    &lt;/span&gt;{
        &lt;span style="color: blue"&gt;public &lt;/span&gt;MyWebService()
        {
            &lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt;.Current.Application.GetContainer().BuildUp(&lt;span style="color: blue"&gt;this&lt;/span&gt;);
        }

        [&lt;span style="color: #2b91af"&gt;Dependency&lt;/span&gt;]
        &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IControlData &lt;/span&gt;Data
        {
            &lt;span style="color: blue"&gt;get&lt;/span&gt;;
            &lt;span style="color: blue"&gt;set&lt;/span&gt;;
        }

        [&lt;span style="color: #2b91af"&gt;WebMethod&lt;/span&gt;]
        &lt;span style="color: blue"&gt;public string &lt;/span&gt;HelloWorld()
        {
            &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;"Hello World " &lt;/span&gt;+ Data.GetText();
        }
    }
}&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;To add the ability to have a container at the Session level and the request level should be as simple as following the pattern for the extension method and the http handler above. (I will leave it as an exercise for the reader.) You could use the same container for everything, or have the Session container a child of the application container, and the request container a child of the session container.&amp;nbsp; When and if we do a real implementation (as opposed to a proof of concept) we will figure out the best approach for most cases.&amp;nbsp; When and if this happens, I will update my CWAB with Unity solution and dramatically simplify it. :-)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8744912" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Development+Tools/default.aspx">Development Tools</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Web+Client+Software+Factory/default.aspx">Web Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Unity/default.aspx">Unity</category></item><item><title>Acceptance Testing Guide Update</title><link>http://blogs.msdn.com/mpuleio/archive/2008/07/10/acceptance-testing-guide-update.aspx</link><pubDate>Fri, 11 Jul 2008 03:27:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8719337</guid><dc:creator>mpuleio</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8719337.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8719337</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8719337</wfw:comment><description>&lt;p&gt;The team has been writing, editing, re-writing, and working hard on putting together a guide on Acceptance Testing.&amp;nbsp; We have made quite a bit of progress, decided on an organization scheme, the basic format of how we want to write each chapter, and have re-worked a lot of content to fit this model.&amp;nbsp; We recently posted two things on the &lt;a href="http://www.codeplex.com/TestingGuidance" target="_blank"&gt;Acceptance Testing Guidance CodePlex site&lt;/a&gt;: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;A survey on &lt;a href="http://www.zoomerang.com/Survey/survey-intro.zgi?p=WEB227YRCP7C6S" target="_blank"&gt;What is Hard To Test?&lt;/a&gt;&lt;/li&gt; &lt;li&gt;A &lt;a href="http://www.codeplex.com/TestingGuidance/Release/ProjectReleases.aspx?ReleaseId=15101" target="_blank"&gt;preview release of a few chapters/snippets/etc&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, please answer our survey.&amp;nbsp; It only has &lt;em&gt;&lt;strong&gt;ONE &lt;/strong&gt;&lt;/em&gt;question.&lt;/p&gt; &lt;p&gt;Also, send us feedback on the draft sections of the guide we posted by starting up some discussions in the &lt;a href="http://www.codeplex.com/TestingGuidance/Thread/List.aspx" target="_blank"&gt;Acceptance Testing Guide Discussions group&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8719337" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Acceptance+Test+Engineering+Guidance/default.aspx">Acceptance Test Engineering Guidance</category></item><item><title>Converting the Composite Web Application Block to Unity - Using the UnityCompositionContainer</title><link>http://blogs.msdn.com/mpuleio/archive/2008/05/21/converting-the-composite-web-application-block-to-unity-using-the-unitycompositioncontainer.aspx</link><pubDate>Wed, 21 May 2008 19:38:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8528652</guid><dc:creator>mpuleio</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/mpuleio/comments/8528652.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mpuleio/commentrss.aspx?PostID=8528652</wfw:commentRss><wfw:comment>http://blogs.msdn.com/mpuleio/rsscomments.aspx?PostID=8528652</wfw:comment><description>&lt;p&gt;This is the sixth post in a series. The other post include:  &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/04/04/converting-the-composite-web-application-block-to-unity-intro.aspx"&gt;Converting the Composite Web Application Block to Unity - Intro&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/04/04/converting-the-composite-web-application-block-to-unity-adding-an-icompositioncontainer.aspx" target="_blank"&gt;Converting the Composite Web Application Block to Unity - Adding an ICompositionContainer&lt;/a&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/04/09/converting-the-composite-web-application-block-to-unity-clean-up-icompositioncontainer.aspx"&gt;Converting the Composite Web Application Block to Unity - Clean Up ICompositionContainer&lt;/a&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/04/22/converting-the-composite-web-application-block-to-unity-ummmm-oooops.aspx"&gt;Converting the Composite Web Application Block to Unity - Ummmm...Oooops.&lt;/a&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/mpuleio/archive/2008/05/01/converting-the-composite-web-application-block-to-unity-actually-adding-unity.aspx" target="_blank"&gt;Converting the Composite Web Application Block to Unity - Actually Adding Unity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you want background, go read the earlier posts.  &lt;p&gt;Based upon feedback, I am making the source code available at &lt;a title="http://www.codeplex.com/websf/Wiki/View.aspx?title=CWAB%20and%20Unity" href="http://www.codeplex.com/websf/Wiki/View.aspx?title=CWAB%20and%20Unity" target="_blank"&gt;CWAB and Unity&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For those who have been following along, you all know I am making this up as I go. So, I am asking that you be patient with me as we figure this out together. This article (in particular) may have a few false starts, and "ooops" moments.&amp;nbsp; We are replacing something that was not meant to be pluggable, and all of the refactoring work that has been done up to this point may not be enough.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Reminder:&amp;nbsp; &lt;/strong&gt;&lt;em&gt;&lt;u&gt;This is a proof of concept&lt;/u&gt;&lt;/em&gt;.&amp;nbsp; The version of CWAB I am creating here is not a supported product or guidance from patterns &amp;amp; practices.&amp;nbsp; If you really want Unity support in WCSF, please go to the Issue Tracker on the &lt;a href="http://www.codeplex.com/websf" target="_blank"&gt;WCSF Community Site&lt;/a&gt; and vote for the work item to get Unity support for WCSF.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;At the end of the last post I planned on trying to actually use the UnityCompositionContainer, and then nuke the old CompositionContainer.&lt;/p&gt; &lt;p&gt;Let's get started by replacing any calls that creates a CompositionContainer with code that creates a UnityCompositionContainer.&amp;nbsp; There is ONE spot, in WebClientApplication.&amp;nbsp; Simple. Change, recompile, re-run unit tests, and we are green. &lt;/p&gt; &lt;p&gt;If it really was that simple, we should be able to remove the CompositionContainer class (and its test fixture) from the solution, and not have any challenges.&amp;nbsp; Let's try that.&lt;/p&gt; &lt;p&gt;We fail to compile.&amp;nbsp; Our TestableRootCompositionContainer is part of the problem. MockContainer in ManagedObjectCollectionFixture is the rest of it.&lt;/p&gt; &lt;p&gt;If we derive TestableRootCompositionContainer from UnityContainer, and remove everything from the class (as a temporary measure), we go from two to 27 build errors.&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;lt;timewarp duration="an or two"/&amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Not good.&amp;nbsp; But not too bad, considering what comes next.&amp;nbsp; After fixing these build errors, I got on a roll, and did the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Removed references to the old ObjectBuilder.dll in both unit test and system projects  &lt;li&gt;Removed the BuilderStrategies folder in both unit test and system projects  &lt;li&gt;Removed the Collections folder in both unit test and system projects  &lt;li&gt;Removed the ObjectBuilder folder in both unit test and system projects  &lt;li&gt;Removed the ProviderDependencyAttribute and its fixture  &lt;li&gt;Removed StateDependencyAttribute and its fixture  &lt;li&gt;Removed OptionalDependencyAttribute and its fixture  &lt;li&gt;Removed ServiceDependencyAttribute and its fixture  &lt;li&gt;Removed all references to the old ObjectBuilder namespace  &lt;li&gt;Replaced any [CreateNew] attributes with the Unity [Dependency] attribute  &lt;li&gt;Hacked on WebClientApplication  &lt;li&gt;Removed the Services collection.&amp;nbsp; Replaced calls to container.Services.Add with container.RegisterType.&amp;nbsp; If needed added a call to container.Resolve, when the Services.Add call was supposed to return an object.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ok, things are compiling again.&amp;nbsp; Finally.&amp;nbsp; But there are a few failing unit tests, about 20 or so...&amp;nbsp; Let's fix those.&lt;/p&gt; &lt;p&gt;&amp;lt;type... type.... swear.... type /&amp;gt;&lt;/p&gt; &lt;p&gt;Getting those test to pass was fairly simple.&amp;nbsp; All of them required a little bit of container setup that was different than before.&amp;nbsp; This was not a big deal.&lt;/p&gt; &lt;p&gt;There is one major change I did make in the process, and a related renaming.&amp;nbsp; First, the renaming, Page became InjectablePage; MasterPage became InjectableMasterPage, and guess what UserControl became? Excactly, InjectableUserControl.&amp;nbsp; These are better descriptions and will remove the confusion I have dealt with on the forums where people use the wrong Page base class.&amp;nbsp; The other change is that, previously CompositionContainer had two Builders: one for things like services that stayed around, and another for Pages and transient items like presenters.&amp;nbsp; We no longer need two builders, and can get containers and lifetime managers to handle the differences.&amp;nbsp; The approach I took for simplicity is to have each page create a container that is a child of the correct Module container, use this for doing injection on the page, and then nuking the container on Page.Dispose.&amp;nbsp; This is quick and dirty, and it works, but I may revisit it later. &lt;/p&gt; &lt;p&gt;Now, since Unity 1.1 just shipped, it is time to upgrade.&amp;nbsp; I replaced the binaries and...&lt;/p&gt; &lt;p&gt;Everything still passes.&lt;/p&gt; &lt;p&gt;I think that is enough for today.&lt;/p&gt; &lt;p&gt;As a quick check, I just looked at the solution statistics for the original version of CWAB and the current solution.&amp;nbsp; CWAB went from 26KLOC (pre-article one) to 14KLOC, both numbers including unit tests.&amp;nbsp; And I bet that there is more to be cut out and cleaned up.&amp;nbsp; Having a purpose built, re-usable component for DI helped a lot here.&amp;nbsp; For this edition, windiff will probably be the best bet for following all the types of changes I made.&amp;nbsp; This one took a while and impacted &lt;em&gt;&lt;strong&gt;a lot &lt;/strong&gt;&lt;/em&gt;of code.&lt;/p&gt; &lt;p&gt;Next, I am going to review unit tests, run code coverage, determine if there are gaps in test coverage after all the hacking.&amp;nbsp; After that, it will be porting one of the quickstarts over to the new version of CWAB.&amp;nbsp; After that, the RI, at which point I will be sure that the updated version works well enough to be a good proof of concept.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8528652" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mpuleio/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Web+Client+Software+Factory/default.aspx">Web Client Software Factory</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/mpuleio/archive/tags/Unity/default.aspx">Unity</category></item></channel></rss>