<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://codebetter.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>Jeremy D. Miller -- The Shade Tree Developer</title><link>http://codebetter.com/blogs/jeremy.miller/default.aspx</link><description>Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

</description><dc:language>en</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>It’s been years since I’ve gone on an Anti-Singleton rant</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/06/it-s-been-years-since-i-ve-gone-on-an-anti-singleton-rant.aspx</link><pubDate>Tue, 06 Jan 2009 21:52:49 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186987</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186987</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/06/it-s-been-years-since-i-ve-gone-on-an-anti-singleton-rant.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;So apparently it’s time again:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://imagebin.ca/img/LHYFxh64.jpg" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;See:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/pages/129545.aspx"&gt;TDD Design Starter Kit - Static Methods and Singletons May Be Harmful&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;and&lt;/p&gt;  &lt;p&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/08/04/130302.aspx"&gt;Chill out on the Singleton Fetish&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;TypeMock will make singletons and statics “testable” now, but you’ll still get screwed over with very tight coupling.&amp;#160; &lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186987" width="1" height="1"&gt;</description></item><item><title>Quickie StructureMap Update for Jan ‘09</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/04/quickie-structuremap-update-for-jan-09.aspx</link><pubDate>Mon, 05 Jan 2009 04:42:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186930</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186930</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/04/quickie-structuremap-update-for-jan-09.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Before the holidays &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/12/22/structuremap-2-5-1-is-released.aspx"&gt;I more or less promised&lt;/a&gt; the stuff below (and status in bold red).&amp;nbsp; The short status is that I’m going to post a completely new StructureMap website with *complete* documentation and examples by the end of the week.&amp;nbsp; I will also be making a small 2.5.2 release by Friday the 9th (I just want to finish the documentation and do more dogfooding at work first).&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A Silverlight ready version (i.e. a cutdown StructureMap) &lt;b&gt;&lt;font color="#ff0000"&gt;Not started.&amp;nbsp; Targeting late January&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Finish the Mono support.&amp;nbsp; It&amp;#39;s very close, but I want to make sure. &lt;a href="http://www.e-tobi.net/blog/"&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;Tobias Grimm&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;font color="#ff0000"&gt; has sent me several patches for this to me and says that StructureMap is compiling, running, and passing all unit tests on Mono.&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;The *#%$ &amp;quot;BuildUp&amp;quot; functionality that allows you to do setter injection on an object that&amp;#39;s created somewhere else.&amp;nbsp; Thank you ASP.Net. &lt;b&gt;&lt;font color="#ff0000"&gt;Done in Trunk (will release in 2.5.2)&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Convention based setter injection (low hanging fruit) &lt;b&gt;&lt;font color="#ff0000"&gt;Done in Trunk (will release in 2.5.2).&amp;nbsp; Shamelessly stole this idea from Ninject.&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;A guarantee that StructureMap will function in partially trusted environments, or at least real guidance on what it can and cannot do&amp;nbsp; &lt;b&gt;&lt;font color="#ff0000"&gt;Not Started.&amp;nbsp; I’m going to put my current project into Medium Trust and just see what happens.&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;&amp;quot;Missing Instance&amp;quot; handlers &lt;b&gt;&lt;font color="#ff0000"&gt;Done in Trunk (will release in 2.5.2)&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;A &amp;quot;ConditionalInstance&amp;quot; that will give you easier ways to do conditional construction &lt;b&gt;&lt;font color="#ff0000"&gt;Done in Trunk (will release in 2.5.2)&lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Improved diagnostics.&amp;nbsp; The error output and the output from StructureMapDoctor and ObjectFactory.AssertConfigurationIsValid() could be a lot better &lt;b&gt;&lt;font color="#ff0000"&gt;Putting off to a 2.5.3 release &lt;/font&gt;&lt;/b&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Plus:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;b&gt;Idiomatic&lt;/b&gt; StructureMap Prism Bootstrapper &lt;b&gt;&lt;font color="#ff0000"&gt;I have preliminary notes on this, and it isn’t big.&amp;nbsp; I expect to have this released by 1/9/09 in 2.5.2.&amp;nbsp; &lt;/font&gt;&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Complete Documentation &lt;b&gt;&lt;font color="#ff0000"&gt;75% done.&amp;nbsp; &lt;a href="https://structuremap.svn.sourceforge.net/svnroot/structuremap/trunk/Source/HTML/"&gt;See here for the docs in Subversion&lt;/a&gt;&lt;/font&gt;&lt;/b&gt;.&amp;nbsp; Feedback on the docs would be much appreciated.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;For the record, I typed ‘09 the first time I had to write down a date this year.&amp;nbsp; First time ever to get it right.&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186930" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/jeremy.miller/archive/tags/StructureMap/default.aspx">StructureMap</category></item><item><title>Happy New Year!</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/04/happy-new-year.aspx</link><pubDate>Mon, 05 Jan 2009 03:10:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186927</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186927</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2009/01/04/happy-new-year.aspx#comments</comments><description>&lt;p&gt;Everyone else is doing a 2008 to 2009 post, so why not.&amp;nbsp; 2008 was a very rough year for me personally, but I learned some good life lessons last year:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;One door closing might just lead to another door opening.&amp;nbsp; I started what I thought was going to be my dream job in January and was unemployed by the first week of April.&amp;nbsp; Dejected and discouraged, I took the job at Dovetail because I knew Chad and some of the other crew there and figured it would be stable.&amp;nbsp; A half year later I can easily say that this is the best job I’ve ever had in terms of my job satisfaction.&amp;nbsp; I love the people I work with, I love the environment, and the work has been interesting.&amp;nbsp; I’m even charged up for a couple upcoming months of crunch time.&lt;/li&gt;    &lt;li&gt;If you know you need to make a life change, get over the fear and do it.&amp;nbsp; Said life change basically ruined my 2008, but it gives me some reason to look forward to ‘09 and beyond.&amp;nbsp; In retrospect, I should have done it years earlier.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h4&gt;My Software Development Plans for 2009&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;I just got renewed as an MVP for C# &lt;/li&gt;    &lt;li&gt;I’m planning on cranking out a couple more little releases of StructureMap by the end of January.&amp;nbsp; Between creating (75% done) full documentation, getting StructureMap running on all major .Net Frameworks (3.5, Mobile/Compact, Silverlight, Mono), and adding some requested features, I’m hoping to get StructureMap into more or less a maintenance mode for the rest of the year.&amp;nbsp; &lt;/li&gt;    &lt;li&gt;Write my Presentation Patterns book for Addison Wesley.&amp;nbsp; It’s been 2 years in the making, and it’ll be almost 3 before it’s published.&amp;nbsp; I hope to blog about it as I go much the way Ayende did with his Boo DSL book.&amp;nbsp; &lt;/li&gt;    &lt;li&gt;Make an initial release of the rebooted StoryTeller.&amp;nbsp; My team is dogfooding it now, so the engine is in good shape.&amp;nbsp; I’m going to rewrite the UI from scratch in WPF and use a lot of the UI infrastructure as sample code for my book. &lt;/li&gt;    &lt;li&gt;Continue writing the Patterns in Practice column in MSDN Magazine.&amp;nbsp; I’m enjoying it so far (and it’s paying for my new car ;-) );&amp;nbsp; Please send me any subject requests or article ideas!&lt;/li&gt;    &lt;li&gt;Contribute a little tiny bit to other OSS projects like Fluent NHibernate, FubuMVC, and MassTransit&lt;/li&gt;    &lt;li&gt;I’m committed to speaking at the &lt;a href="http://ndc2009.no/en/"&gt;Norwegian Developers Conference&lt;/a&gt; in Oslo (the city, not the DSL tool) in June, and I’m pretty excited about it.&amp;nbsp; Assuming it’s ok with work, I’ll be at the Seattle ALT.Net Open Spaces in March, but I just can’t miss a week of work this spring to attend the MVP Summit this time around.&amp;nbsp; Other than that, I’m hoping to do one more conference in the fall and maybe another Open Spaces event here and there.&lt;/li&gt;    &lt;li&gt;Blogging?&amp;nbsp; Well, not so much.&amp;nbsp; I’d like to finish the “First Causes” series I started last year.&amp;nbsp; Other than that, it’ll probably just be StructureMap, StoryTeller, and Presentation Patterns stuff.&amp;nbsp; I’d like to stay away from any new “Vote of No Confidence” / Oxite / “Billy Hollis doesn’t like Agile” arguments and focus on doing my own things first.&amp;nbsp; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h4&gt;Personal Plans and Resolutions&lt;br /&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Respond to email correspondence and StructureMap questions much quicker&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I just turned 35, so this is just about the last chance for me to get in shape, lose some weight, and have a couple more good years on the basketball court (plus take some weight off of my reconstructed knees)&lt;/li&gt;    &lt;li&gt;Cook more at home&lt;/li&gt;    &lt;li&gt;Get out of the house more often.&amp;nbsp; See Toni Price play this year before she retires altogether.&lt;/li&gt;    &lt;li&gt;Catch a bass bigger than 1lb this year&lt;/li&gt;    &lt;li&gt;Finish my book with enough time to spare so that I can reread the entire Wheel of Time series before A Memory of Light comes out!&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186927" width="1" height="1"&gt;</description></item><item><title>StructureMap 2.5.1 is Released</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/22/structuremap-2-5-1-is-released.aspx</link><pubDate>Mon, 22 Dec 2008 15:41:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186573</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186573</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/22/structuremap-2-5-1-is-released.aspx#comments</comments><description>&lt;p&gt;I just uploaded a new incremental release of StructureMap with a bunch of bugfixes and a few new features.&amp;nbsp; &lt;a href="https://sourceforge.net/projects/structuremap/"&gt;Download it here&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;From the release notes:&lt;/p&gt;&lt;p&gt;* Fixed issue with With&amp;lt;T&amp;gt;(object).GetInstance&amp;lt;U&amp;gt;() functionality.&amp;nbsp; This is now much more robust.&lt;br /&gt;* Bug fix for Hybrid scoping&lt;br /&gt;* TryGetInstance() and TryGetNamedInstance().&amp;nbsp; &lt;br /&gt;* Ignore setter emitting for indexer properties -- fixed a bug reported on the forum&lt;br /&gt;* Multithreading lock problem fixed by Josh&lt;br /&gt;* Patch for session lifetime.&amp;nbsp; There is now an option for &amp;quot;CacheBy(InstanceScope.HttpSession)&amp;quot;&lt;br /&gt;* Fixed Public IDictionary setter injection in xml : http://groups.google.com/group/structuremap-users/browse_thread/thread/21265544d73cd395?hl=en&lt;br /&gt;* Pete Johnson&amp;#39;s fix for ObjectFactory.Configure() setting policy.&amp;nbsp; You can now set the scoping/lifecycle of a PluginType from Configure()&lt;br /&gt;* EjectAllInstances&amp;lt;T&amp;gt;() clears out Singleton objects now (and calls Dispose() if appropriate)&lt;br /&gt;* Josh has added an experimental debugger visualizer for StructureMap Container&amp;#39;s &lt;/p&gt;&lt;p&gt;* The AutoMocker isn&amp;#39;t as whiny about RhinoMocks versions.&amp;nbsp; There is also an AutoMocker strategy for Moq now as well&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;* A minor performance enhancement that stops StructureMap from doing a scan of all types on the StructureMap assembly itself. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Please send all questions to the &lt;a href="http://groups.google.com/group/structuremap-users?hl=en"&gt;StructureMap Google list&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;The Future &lt;/b&gt;&lt;/p&gt;&lt;p&gt;I&amp;#39;m hoping to complete the new StructureMap website and documentation over the holidays, and that&amp;#39;s the next priority.&amp;nbsp; After that, I&amp;#39;d like to get a new 2.6 release out in the early quarter of &amp;#39;09.&amp;nbsp; Here&amp;#39;s what I&amp;#39;m thinking about in no particular order:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;A Silverlight ready version (i.e. a cutdown StructureMap)&lt;/li&gt;&lt;li&gt;Finish the Mono support.&amp;nbsp; It&amp;#39;s very close, but I want to make sure&lt;/li&gt;&lt;li&gt;The *#%$ &amp;quot;BuildUp&amp;quot; functionality that allows you to do setter injection on an object that&amp;#39;s created somewhere else.&amp;nbsp; Thank you ASP.Net.&lt;/li&gt;&lt;li&gt;Convention based setter injection (low hanging fruit)&lt;/li&gt;&lt;li&gt;A guarantee that StructureMap will function in partially trusted environments, or at least real guidance on what it can and cannot do&lt;/li&gt;&lt;li&gt;&amp;quot;Missing Instance&amp;quot; handlers&lt;/li&gt;&lt;li&gt;A &amp;quot;ConditionalInstance&amp;quot; that will give you easier ways to do conditional construction&lt;/li&gt;&lt;li&gt;Improved diagnostics.&amp;nbsp; The error output and the output from StructureMapDoctor and ObjectFactory.AssertConfigurationIsValid() could be a lot better&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now&amp;#39;s a good time to ask for things.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ok, that&amp;#39;s it for me this year.&amp;nbsp; Merry Christmas and Happy Holidays, and I&amp;#39;ll see you in January. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186573" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/jeremy.miller/archive/tags/StructureMap/default.aspx">StructureMap</category></item><item><title>In case you didn't already know this...</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/20/in-case-you-didn-t-already-know-this.aspx</link><pubDate>Sun, 21 Dec 2008 00:03:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186485</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186485</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/20/in-case-you-didn-t-already-know-this.aspx#comments</comments><description>&lt;p&gt;If TestDriven.Net or the ReSharper test runner crater violently, you need to think about where you could be getting a StackOverflowException. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186485" width="1" height="1"&gt;</description></item><item><title>Improvements in the StructureMap AutoMocker</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/19/improvements-in-the-structuremap-automocker.aspx</link><pubDate>Fri, 19 Dec 2008 15:38:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186453</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186453</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/19/improvements-in-the-structuremap-automocker.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.lostechies.com/blogs/joshuaflanagan/default.aspx"&gt;Josh&lt;/a&gt; just &lt;a href="http://groups.google.com/group/structuremap-users/browse_thread/thread/22f877ca3b5249a3?hl=en"&gt;checked some stuff into the trunk&lt;/a&gt; last night to address some versioning conflict issues we&amp;#39;ve had with RhinoMocks.&amp;nbsp; There is also an AutoMocker strategy for &lt;a href="http://code.google.com/p/moq/"&gt;Moq&lt;/a&gt; as well. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186453" width="1" height="1"&gt;</description></item><item><title>My “Best Of” for 2008</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/17/my-best-of-for-2008.aspx</link><pubDate>Thu, 18 Dec 2008 02:05:42 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:186226</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=186226</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/17/my-best-of-for-2008.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I haven’t been nearly as prolific a blogger as I used to be this year, so this one is going to be short.&amp;#160; Below is a list of my blog posts from the last year and change that I thought were the best.&amp;#160; Also check out:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/08/07/Best-of-the-Shade-Tree-Developer-_2800_with-actual-links_21002900_.aspx"&gt;Best of The Shade Tree Developer&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/10/18/best-of-the-shade-tree-developer-part-ii.aspx"&gt;Best of The Shade Tree Developer II&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;&lt;strong&gt;Oct. ‘07 – Dec ‘08&lt;/strong&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/10/31/be-not-afraid-of-the-visitor-the-big-bad-composite-or-their-little-friend-double-dispatch.aspx"&gt;Be not afraid of the Visitor, the big, bad Composite, or their little friend Double Dispatch&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/10/31/development-trivial-pursuit-the-difference-between-mvc-and-the-different-flavors-of-mvp.aspx"&gt;Development Trivial Pursuit: The difference between MVC and the different flavors of MVP&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/11/08/don-t-think-you-know-more-than-you-do.aspx"&gt;Don&amp;#39;t think you know more than you do&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/12/04/a-microcosm-of-agile-design.aspx"&gt;A Microcosm of Agile Design&lt;/a&gt; (this one was controversial, but that was more or less the point)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/01/25/should-i-blog.aspx"&gt;Should I Blog?&lt;/a&gt; (yes)      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/02/02/how-do-i-know-descartes-rationalism-versus-hume-s-empiricism.aspx"&gt;How do I know?: Descartes&amp;#39; Rationalism versus Hume&amp;#39;s Empiricism&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/02/05/first-causes-in-software-development-how-do-i-decide-what-is-good.aspx"&gt;First Causes in Software Development: How do I decide what is good?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/02/10/first-causes-reversibility.aspx"&gt;First Causes:&amp;#160; Reversibility&lt;/a&gt; (I got distracted by moving across country before I finished this series.&amp;#160; I’ve had the draft for the next part and my notes reference something on a project from two years ago.&amp;#160; I will do more)      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/03/03/unit-testing-playing-tennis-and-the-lack-of-absolutes-in-tdd.aspx"&gt;Unit testing, playing tennis, and the lack of absolutes in TDD&lt;/a&gt; (I still hold that the folks that go to extreme measures to avoid using a mock object are doing themselves a disfavor)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/04/22/rightsizing-your-approach.aspx"&gt;Rightsizing Your Approach&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/05/15/why-do-we-refactor.aspx"&gt;Why do we Refactor?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/23/our-opinions-on-the-asp-net-mvc-introducing-the-thunderdome-principle.aspx"&gt;Our “Opinions” on the ASP.NET MVC (Introducing the Thunderdome Principle)&lt;/a&gt; (the ASP.Net MVC framework is much more efficient when you add your own special sauce to your project)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/17/test-automation-brain-dump.aspx"&gt;Test Automation Braindump&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/11/11/evolution-of-a-developer-in-regards-to-di-ioc.aspx"&gt;Evolution of a Developer&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=186226" width="1" height="1"&gt;</description></item><item><title>Design and Testability</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/10/design-and-testability.aspx</link><pubDate>Wed, 10 Dec 2008 05:25:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185891</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>27</slash:comments><description>&lt;p&gt;&lt;b&gt;EDIT 12/23/2008:&amp;nbsp; I believe this post has been massively misconstrued in the comments.&amp;nbsp; Apparently, my analogy here was terrible from the way so many people are distorting what I was trying to say.&amp;nbsp; For the record,&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;I DID NOT SAY DON&amp;#39;T WRITE TESTS&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;I DID NOT SAY YOU MUST BE A MASTER OF ALL DESIGN LORE BEFORE YOU GET TO WRITE A TEST&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;I DID NOT SAY THAT YOU MUST HAVE A PERFECT, PURIST DESIGN FIRST&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;I DID NOT SAY DO NOT WRITE TESTS FOR LEGACY CODE&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I said, or attempted to say, that testing and testability cannot be decoupled from design, and any effort towards automated testing / unit testing / TDD is probably not going to be successful until the team has a good understanding of the basics ( and I did say basics here) of fundamental software design. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;My most recent Patterns in Practice article entitled &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd263069.aspx"&gt;Design for Testability&lt;/a&gt; is available in this month&amp;#39;s issue of MSDN Magazine. This time around, I tried to tackle some of the design issues around supporting testability.&amp;nbsp; I’ve written four articles so far for MSDN on design fundamentals.&amp;nbsp; If you look at the whole body of work, there’s a very common theme:&amp;nbsp; good, fundamental design is being able to do one thing at a time.&amp;nbsp; I want to decompose the system so that I can change one thing at a time with less risk of destabilizing other parts of the system.&amp;nbsp; I want to be able to understand one element of the system at a time.&amp;nbsp; I want to solve one little problem at a time instead of tackling the whole mess in one try.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;Testability as a design concept is right in line with this kind of thinking.&amp;nbsp; Testability means being able to easily create rapid, effective, and focused feedback cycles against your code with automated tests.&amp;nbsp; Testability isn’t some strange and unnatural new way to shape code.&amp;nbsp; For the most part (ok, it might be if you cut your programming teeth with Microsoft’s RAD tools), Testability goes hand in hand with the same structural qualities like &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc947917.aspx"&gt;cohesion and coupling&lt;/a&gt; that we use to create code that’s easier to write, change, and understand.&amp;nbsp; On the other hand, we can use Testability within design techniques like Test Driven Development and/or Behavioral Driven Development to inform and help guide our design decisions.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h4&gt;&lt;b&gt;Unit Testing – Solid Design == PAIN!&lt;/b&gt;&lt;/h4&gt;  &lt;p&gt;A couple months back &lt;a href="http://weblogs.asp.net/rosherove"&gt;Roy Osherove&lt;/a&gt; wrote a post entitled &lt;a href="http://weblogs.asp.net/rosherove/archive/2008/09/26/unit-testing-decoupled-from-design-adoption.aspx"&gt;Unit Testing decoupled from Design == Adoption&lt;/a&gt; that posited the theory that things will work out better for the larger community if we drop all this hard design theory and TDD discipline and just get developers to write unit tests first.&amp;nbsp; The theory being that more developers would be more likely to adopt some sort of unit testing, fail, then naturally circle back to learning about design or try out TDD after they get started.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;I couldn’t possibly disagree more with Roy on this.&amp;nbsp; I would describe Roy’s suggestion as akin to telling an out of shape 30 something with no prior athletic experience to start playing competitive basketball by just walking onto the court and getting into a pickup game.&amp;nbsp; That out of shape 30 something fellow isn’t going to be able to compete, and he’s likely to limp off too discouraged and humiliated to continue.&amp;nbsp; After all, why would the average person sign up for another beating?&amp;nbsp; Likewise, a developer with little foundational knowledge about good design principles will be very unlikely to succeed in any way with unit testing because it’ll be just too hard with poorly structured code (and no, I don’t think any “Isolation” framework will change that).&amp;nbsp; I would tell the 30 something to work on his cardiovascular conditioning (and his jumpshot) before he steps onto that basketball court for the first time.&amp;nbsp; I’d tell that developer to focus on his understanding (not rote knowledge, but understanding) of good design first and be ready to succeed upfront.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;I guess to summarize and beat the analogy into the ground, cardiovascular health is beneficial for more than just playing pickup basketball after work and good design is valuable for more things than making unit testing and acceptance testing easier.&amp;nbsp; In short, &lt;b&gt;good design is far more beneficial and important than the practice of unit testing&lt;/b&gt;.&amp;nbsp; However, good design + TDD/Behavioral Driven Development/Acceptance Test Driven Development?&amp;nbsp; That’s where the real rewards happen.&amp;nbsp; Don’t settle for mediocre efforts.&amp;nbsp; Do both and reap the rewards.&lt;/p&gt;  &lt;p&gt;A couple years ago I was reading some writing from older guys like Steve McConnell and Robert Glass that stated that Test Driven Development couldn’t work because unit testing was proven to be only marginal cost effective – and they based those statements on studies that dated back to COBOL developers in the ‘70s and ‘80s writing purely procedural code.&amp;nbsp; TDD with well factored OOP or Functional code compared to unit testing tightly coupled structured programming is apples and oranges.&amp;nbsp; I have consistently found that the cost effectiveness of unit testing and Test Driven Development is almost entirely based on the structural design of the class structure of the system being built.&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h4&gt;&lt;b&gt;Other Reading&lt;/b&gt;&lt;/h4&gt;  &lt;p&gt;I think this is a huge topic, and one measly 3500 word article isn’t going to cover the topic adequately.&amp;nbsp; Learning xUnit tools and even mock object frameworks is a piece of cake compared to learning how to design and write code that enables efficient testing.&amp;nbsp; Here are some of my older writings from the time when I had just gotten over the hump and started to figure out how to compose code to enable Test Driven Development.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/articles/131726.aspx"&gt;TDD Design Starter Kit: It’s All about Assigning Responsibilities&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/articles/129544.aspx"&gt;TDD Design Starter Kit - State vs. Interaction Testing&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/articles/129543.aspx"&gt;TDD Design Starter Kit - Dependency Inversion Principle&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/articles/129542.aspx"&gt;TDD Design Starter Kit – Responsibilities, Cohesion, and Coupling&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/articles/129545.aspx"&gt;TDD Design Starter Kit - Static Methods and Singletons May Be Harmful&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129540.aspx"&gt;Succeed with TDD by designing with TDD&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/10/12/133017.aspx"&gt;Unit Testing Business Logic without Tripping Over the Database&lt;/a&gt;     &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/10/20/133437.aspx"&gt;Jeremy&amp;#39;s First Rule of TDD&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/03/09/140465.aspx"&gt;Jeremy&amp;#39;s Second Law of TDD: Push, Don&amp;#39;t Pull&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/05/30/145752.aspx"&gt;Achieve Better Results by following Jeremy&amp;#39;s Third Law of TDD: Test Small Before Testing Big&lt;/a&gt; - I think this is the most important lesson for making TDD work for you &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/04/27/Jeremy_2700_s-Fourth-Law-of-Test-Driven-Development_3A00_-Keep-Your-Tail-Short.aspx"&gt;Jeremy&amp;#39;s Fourth Law of Test Driven Development: Keep Your Tail Short&lt;/a&gt;     &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/12/19/135757.aspx"&gt;Mock Objects and Stubs: The Bottle Brush of TDD&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/12/20/135800.aspx"&gt;Why and When to Use Mock Objects&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/01/10/136407.aspx"&gt;Best and Worst Practices for Mock Objects&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/07/03/147075.aspx"&gt;Mock Objects are your Friend&lt;/a&gt;     &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/08/17/130864.aspx"&gt;Testing Granularity, Feedback Cycles, and Holistic Development&lt;/a&gt;     &lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;h4&gt;&lt;b&gt;The Future&lt;/b&gt;&lt;/h4&gt;    &lt;p&gt;The next article is already in editing.&amp;nbsp; For February I’m discussing Ruby on Rails inspired design ideas like convention over configuration, opinionated software, sensible defaults, and once and only once.&amp;nbsp; For April I’m going to write about data access and persistence patterns to fit in with the theme of that month’s issue.&amp;nbsp; After that?&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Patterns for Testability – I missed a lot of important topics in this month’s article.&amp;nbsp; I’d like to hit separated presentation patterns and Inversion of Control as a design pattern maybe. &lt;/li&gt;      &lt;li&gt;Designing an Internal DSL &lt;/li&gt;      &lt;li&gt;Some kind of post on Composition and IoC &lt;/li&gt;      &lt;li&gt;Patterns for Client/Server Communication &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Any requests?&amp;nbsp; Thoughts?&amp;nbsp; I’m bypassing (D)DDD for the most part because there are articles on the way on those very topics from more qualified folks (Don’t tell anyone, but I’m not entirely sure I completely buy off on DDD).&lt;/p&gt;    &lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;h4&gt;&lt;b&gt;Self Reflection&lt;/b&gt;&lt;/h4&gt;    &lt;p&gt;The first three articles in this series are effectively tributes to my software design heroes (Fowler, Rebecca Wirfs-Brock, Uncle Bob Martin, and the Pragmatic Programmers).&amp;nbsp; This last one was largely based on my own prior writings on testability and design.&amp;nbsp; It’s also the one I’m least happy with.&amp;nbsp; Back to hero tributes after this;)&lt;/p&gt;    &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;/li&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185891" width="1" height="1"&gt;</description></item><item><title>I'm demo-ing StoryTeller online tomorrow night (10/10/08)</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/09/i-m-demo-ing-storyteller-online-tomorrow-night-10-10-08.aspx</link><pubDate>Tue, 09 Dec 2008 22:22:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185875</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185875</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/09/i-m-demo-ing-storyteller-online-tomorrow-night-10-10-08.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/12/09/alt-net-online-open-meeting-10-dec-featuring-jeremy-miller.aspx"&gt;Since Chad is putting me on the spot for this&lt;/a&gt;, I&amp;#39;ll be doing a demo and leading a discussion on the &lt;a href="http://storyteller.tigris.org"&gt;StoryTeller&lt;/a&gt; reboot for the ALT.NET Online Open meeting tomorrow night.&lt;/p&gt;&lt;p&gt;StoryTeller is my attempt at creating a new FIT analog for automated acceptance testing.&amp;nbsp; At this point, it&amp;#39;s just the engine without any UI.&amp;nbsp; I will show how we&amp;#39;re using StoryTeller so far at Dovetail.&amp;nbsp; Chad is recording the session for later as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s a bit of example usage:&amp;nbsp; &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/27/a-quick-storyteller-update.aspx"&gt;http://codebetter.com/blogs/jeremy.miller/archive/2008/10/27/a-quick-storyteller-update.aspx &lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185875" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/jeremy.miller/archive/tags/StoryTeller/default.aspx">StoryTeller</category></item><item><title>I can respect a good riposte</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/09/i-can-respect-a-good-riposte.aspx</link><pubDate>Tue, 09 Dec 2008 20:21:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185873</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185873</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/09/i-can-respect-a-good-riposte.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://davesbox.com/archive/2008/12/09/quot-i-can-t-believe-microsoft-didn-t-make-enter-api-name-here-public-quot.aspx"&gt;http://davesbox.com/archive/2008/12/09/quot-i-can-t-believe-microsoft-didn-t-make-enter-api-name-here-public-quot.aspx &lt;/a&gt;&lt;/p&gt;&lt;p&gt;A.)&amp;nbsp; I&amp;#39;m a bit embarrassed by the backwards compatibility issue in StructureMap 2.5, but then again, breaking backwards compatibility cleaned a lot of crap up and made for a better user experience.&amp;nbsp; Most of the things I eliminated were features that probably did more harm than good. &lt;/p&gt;&lt;p&gt;B.)&amp;nbsp; The ExpressionVisitor thing would be a very handy thing to have in the public with solid documentation.&amp;nbsp; How &amp;#39;bout we just make that a feature request for the BCL team? &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185873" width="1" height="1"&gt;</description></item><item><title>Stuff I do like</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/04/stuff-i-do-like.aspx</link><pubDate>Thu, 04 Dec 2008 22:17:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185738</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185738</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/04/stuff-i-do-like.aspx#comments</comments><description>&lt;p&gt;So &lt;a href="http://bradwilson.typepad.com/"&gt;Brad Wilson&lt;/a&gt; basically said on Twitter today that I was being too negative.&amp;nbsp; Since that&amp;#39;s like Debbie Downer asking you to be a little more upbeat, I thought I&amp;#39;d balance that with some stuff that I do like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The new architectural guidance coming from Patterns and Practices.&amp;nbsp; I raised one huge objection and they quickly changed it .&amp;nbsp; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The general direction of xUnit.Net in regards to the no SetUp/TearDown thing, and that&amp;#39;s not just a sop to Brad &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The new AAA syntax and mocking style in both Rhino Mocks and Moq&lt;/li&gt;&lt;li&gt;Nate Kohari&amp;#39;s approach to convention based setter injection in Ninject (I&amp;#39;m going to copy the idea into StructureMap)&lt;/li&gt;&lt;li&gt;Autofac&amp;#39;s extensibility model (also going to copy some of that)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I really, really like getting patches for StructureMap, and I&amp;#39;ve got a couple to incorporate this week&lt;/li&gt;&lt;li&gt;Love the new language features in .Net 3.5.&amp;nbsp; I bitch about generics a lot, but that comes from pushing the envelope on usage and banging into edge cases.&amp;nbsp; It&amp;#39;s really generics within Fluent Interface code that gives me the most heartburn, and that&amp;#39;s not typical usage.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The magic of expressions, and &lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2006/07/06/TypedReflection.aspx"&gt;Daniel Cazzulino for blazing a trail on using Expressions&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The jQuery ecosystem.&amp;nbsp; And I thought Microsoft&amp;#39;s official blessing and support for jQuery was huge&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MassTransit (I think the new service bus tools like nServiceBus &amp;amp; MassTransit basically become a sort of a &amp;quot;Distributed IoC&amp;quot; tool&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Linq to NHibernate and Linq in general of course&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The more powerful auto mapping and convention support in Fluent NHibernate (I didn&amp;#39;t write that part)&lt;/li&gt;&lt;li&gt;Bellware&amp;#39;s SpecUnit assertion extensions&lt;/li&gt;&lt;li&gt;The fluent fixture stuff we stole from the Eleutian guys&lt;/li&gt;&lt;li&gt;The way P&amp;amp;P did the Prism project out in the open&lt;/li&gt;&lt;li&gt;The common service locator initiative&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The way MS is doing the MVC project out in the open&lt;/li&gt;&lt;li&gt;The fact that MS does much more to acknowledge the value of Separated Presentation patterns and encourage their usage than they did just a few years ago&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The fact that MEF is open sourced&lt;/li&gt;&lt;li&gt;The fact that MEF exists I think will help open up and decouple the BCL in some advantageous ways.&amp;nbsp; I think DI-friendly code will make it easier for us to use better composition based design instead of nasty inheritance structures&lt;/li&gt;&lt;li&gt;Yes, I gripe about some details of the MVC, but I made some huge, valuable customizations to our MVC pipeline in the past two days that were possible because the MVC classes are pretty cohesive and well structured&lt;/li&gt;&lt;li&gt;Basically any tool written by JetBrains&lt;/li&gt;&lt;li&gt;JP&amp;#39;s keyboard macro stuff for BDD&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I do like the general concept behind StackOverflow, I&amp;#39;m just dubious about the veracity and wisdom of some of its content&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Auto Mockers and InteractionContext base classes that make interaction style unit tests much easier than a few years ago&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rake as a build tool&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rob Conery&amp;#39;s MVC Storefront podcasts&lt;/li&gt;&lt;li&gt;The HerdingCode podcasts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Elegant Code and Los Techies as blogging communities&lt;/li&gt;&lt;li&gt;You have to look for it a bit, but the fact that many more .Net authors/INETA speakers/gurus from &lt;b&gt;outside&lt;/b&gt; the little ALT.NET echo chamber are addressing design fundamentals and unit testing concerns in their writing and speaking.&amp;nbsp; Don&amp;#39;t read any sarcasm or anything negative into that, I really do think it&amp;#39;s a good thing because those folks have much more reach.&amp;nbsp; I&amp;#39;m thinking specifically about some recent MSDN articles &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The fact that we&amp;#39;re finally getting some well supported alternative languages for .Net.&amp;nbsp; VB.Net and C# are essentially Country and Western.&amp;nbsp; F#, IronRuby, and IronPython gives us Jazz, Blues, and Opera. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;I was surprisingly impressed with &lt;a href="http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-PRO-Developer/dp/073562609X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1228430912&amp;amp;sr=1-1"&gt;Dino Esposito&amp;#39;s latest book on .Net architecture&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The DotNetRocks guest list.&amp;nbsp; Yes, I tend to grumble at some of things that get said on DNR a fair amount, but it&amp;#39;s astounding that they&amp;#39;ve gotten so many of my heros to come onto the show in the last couple months&lt;/li&gt;&lt;li&gt;Ben Scheirman&amp;#39;s new fluent API for testing routes in MVC&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185738" width="1" height="1"&gt;</description></item><item><title>I love Ayende (and OSS)</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/04/i-love-ayende-and-oss.aspx</link><pubDate>Thu, 04 Dec 2008 21:14:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185733</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185733</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/04/i-love-ayende-and-oss.aspx#comments</comments><description>
&lt;p&gt;&amp;nbsp;From one of &lt;a href="http://ayende.com/blog"&gt;Ayende&lt;/a&gt;&amp;#39;s many OSS projects.

&lt;/p&gt;
&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-family:Courier New;font-size:10pt;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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; This class actually already exists in the System.Core assembly...as an internal class.&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; I can only speculate as to why it is internal, but it is obviously much too dangerous&lt;/span&gt;&lt;/p&gt;

&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; for anyone outside of Microsoft to be using...&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;And dear MS BCL team, since so many people are already using Reflector to go get the ExpressionVisitor code, would you just make this public?&amp;nbsp; &amp;#39;K, thx.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185733" width="1" height="1"&gt;</description></item><item><title>Question of the Day -- What's Worse?</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/03/question-of-the-day-what-s-worse.aspx</link><pubDate>Wed, 03 Dec 2008 12:49:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185634</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185634</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/12/03/question-of-the-day-what-s-worse.aspx#comments</comments><description>&lt;p&gt;From Twitter yesterday, I was griping about how once you use a Generics Constraint once and suddenly that same constraint has to immediately ripple through the call stack.&amp;nbsp; &lt;a href="http://odetocode.com/blogs/scott/default.aspx"&gt;Scott Allen&lt;/a&gt; posed me a stumper of a question:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span class="entry-content"&gt;What&amp;#39;s worse: generic constraints, or checked exceptions [in java]?&lt;/span&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Oh wow, that&amp;#39;s a nasty choice.&amp;nbsp; Can I have neither?&amp;nbsp; I&amp;#39;d call both things Noise Code.&amp;nbsp; Smelly, useless, noise code.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Generics Constraints:&amp;nbsp; 90% of the time it&amp;#39;s just to make the compiler shut up and let my code work.&amp;nbsp; Dear C# team, could you deemphasize all the COM interop work in C# and making C# do kloogey dynamic typing, and GIVE ME FAR BETTER TYPE INFERENCE ON GENERICS SO I CAN GET SOMETHING DONE (contra/covariance makes your little academic hearts go pitter patter, but that won&amp;#39;t really help me much)!!!!! &amp;nbsp;&amp;nbsp; Anyway, ReSharper can mostly figure out how to propogate the generic constraints, but it gets confused easily and sometimes the constraints will conflict and...&amp;nbsp; Human intervention is usually necessary.&amp;nbsp; Andy Sherwood calls this&amp;nbsp; &amp;quot;the where tentacles.&amp;quot;&amp;nbsp; Nice.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Checked Exceptions.&amp;nbsp; Much more pervasive, but IntelliJ can handle adding the &amp;quot;throws blah&amp;quot; stuff without any trouble.&amp;nbsp; The problem is that checked exceptions are so much more common and pervasive.&amp;nbsp; Needless to say, I don&amp;#39;t find checked exceptions to be the slightest bit useful.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I guess I&amp;#39;d rather live with the generics constraints than waste time with checked exceptions.&amp;nbsp; Now, keep checked exceptions out of the language, give me F#/OCaml style type inference instead of a nanny compiler (are you sure it&amp;#39;s okay for this object to do this?&amp;nbsp; Confirm or deny), and make ALL methods and properties virtual by default, and I&amp;#39;m&amp;nbsp; a happy camper.&amp;nbsp; If I want dynamic typing, I&amp;#39;ll use IronRuby.&amp;nbsp; If I need office integration, I&amp;#39;ll get a contracter to write VB.Net.&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185634" width="1" height="1"&gt;</description></item><item><title>A Gentle Quickstart for StructureMap 2.5</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/11/30/a-gentle-quickstart-for-structuremap-2-5.aspx</link><pubDate>Mon, 01 Dec 2008 03:52:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185447</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>24</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185447</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/11/30/a-gentle-quickstart-for-structuremap-2-5.aspx#comments</comments><description>&lt;p&gt;The most general question I get with StructureMap is “how do I get started?”&amp;nbsp; Personally, I’d recommend that you first get comfortable &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/06/29/some-concepts-to-know-first.aspx"&gt;with some concepts&lt;/a&gt; and the basic patterns of &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/10/06/132825.aspx"&gt;Dependency Injection&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2005/09/20/132290.aspx"&gt;Inversion of Control first&lt;/a&gt;.&amp;nbsp; Assuming that you’re already familiar with those concepts, or you’d really rather skip the pedantry and jump right into concrete code, the first thing to do is go download StructureMap and jump into usage (then come back to the patterns and pedantry).&amp;nbsp; &lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Some Salient Facts:&lt;/strong&gt;&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;The latest release is 2.5.0.0, available for download on SourceForge at &lt;a href="http://sourceforge.net/projects/structuremap" title="http://sourceforge.net/projects/structuremap"&gt;http://sourceforge.net/projects/structuremap&lt;/a&gt; 

    &lt;ul&gt;
      &lt;li&gt;The only DLL that you need for doing basic Service Locator and/or Dependency Injection is the StructureMap.DLL file. &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;There is a google group for StructureMap support at &lt;a href="http://groups.google.com/group/structuremap-users?hl=en" title="http://groups.google.com/group/structuremap-users?hl=en"&gt;http://groups.google.com/group/structuremap-users?hl=en&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;StructureMap is released under the Apache 2.0 license, meaning that you can use it in any application or even modify the source in any way you see fit without restriction. &lt;/li&gt;

  &lt;li&gt;StructureMap is actually the oldest, original IoC tool for .Net with the first production release coming in June of 2004 &lt;/li&gt;

  &lt;li&gt;I’m no longer the only person maintaining StructureMap &lt;/li&gt;

  &lt;li&gt;The source code is accessible &lt;a href="https://structuremap.svn.sourceforge.net/svnroot/structuremap/trunk"&gt;here via Subversion&lt;/a&gt; in case you’re curious.&amp;nbsp; No credentials are required to access the source code. &lt;/li&gt;

  &lt;li&gt;Right now, StructureMap 2.5 will run on .Net 3.5 only.&amp;nbsp; I will most likely NOT be backporting the new version to 2.0 because of extensive usage of 3.5 features like Expressions &lt;/li&gt;

  &lt;li&gt;I swear that StructureMap 2.5 will run in medium trust on .Net 3.5 – but please post any problems that you do find with medium trust. &lt;/li&gt;

  &lt;li&gt;A 2.5.1 release is planned for the first week of December with bug fixes, a few new little features, Mono support, and a Silverlight-ready version (it’ll be a subset of the main library). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;The Simplest Possible Usage of StructureMap&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Your interaction with StructureMap is going to mostly consist of two activities:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Asking StructureMap for an instance of a service or dependency (the easy part) &lt;/li&gt;

  &lt;li&gt;Registering “what” and “how” StructureMap should build or find those requested services (the tedious part, but it’s gotten much better over the years) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In our system we use a service called “IValidator” to exercise validation rules on our domain model objects (I talked about the approach &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/06/13/build-your-own-cab-part-9-domain-centric-validation-with-the-notification-pattern.aspx"&gt;here&lt;/a&gt;).&amp;nbsp; By default, we want any consumer of the IValidator interface to use the concrete class named Validator.&amp;nbsp; Since we use StructureMap for resolving dependencies and services, we need to first tell StructureMap to use Validator anytime somebody asks for an IValidator.&amp;nbsp; You configure StructureMap by &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/25/initializing-and-configuring-a-structuremap-container.aspx"&gt;initializing the container&lt;/a&gt; with this code below:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;ContainerBootstrapper&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; BootstrapStructureMap()&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// Initialize the static ObjectFactory container&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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;ObjectFactory&lt;/span&gt;.Initialize(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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; x.ForRequestedType&amp;lt;&lt;span&gt;IValidator&lt;/span&gt;&amp;gt;().TheDefaultIsConcreteType&amp;lt;&lt;span&gt;Validator&lt;/span&gt;&amp;gt;();&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Now that that code is called somewhere in the application initialization, we can get an IValidator object from StructureMap like in this sample code by calling ObjectFactory.GetInstance&amp;lt;IValidator&amp;gt;():&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;ClassThatGetsAnIValidator&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SaveObject(&lt;span style="color:blue;"&gt;object&lt;/span&gt; objectToSave)&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// Go get the proper IValidator from StructureMap&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span&gt;IValidator&lt;/span&gt; validator = &lt;span&gt;ObjectFactory&lt;/span&gt;.GetInstance&amp;lt;&lt;span&gt;IValidator&lt;/span&gt;&amp;gt;();&lt;/strong&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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;var&lt;/span&gt; notification = validator.Validate(objectToSave);&lt;/p&gt;

  &lt;p style="margin:0px;"&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; (notification.IsValid())&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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:green;"&gt;// save the object&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;That’s it, your first usage of StructureMap.&amp;nbsp; No messy Xml configuration, no attributes scattered through your code, just a couple lines of bootstrapping code.&amp;nbsp;&amp;nbsp; Of course, if that’s all StructureMap did, it wouldn’t be worth your time to download it.&amp;nbsp; Let’s look at a bit more advanced example.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;

&lt;h4&gt;&lt;strong&gt;Primitive Arguments&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;I actually like to &lt;a href="http://structuremap.sourceforge.net/ConfigurationManagement.htm"&gt;use StructureMap as a generic configuration tool&lt;/a&gt; (which was actually its original purpose).&amp;nbsp; Let’s say you’re moving to the data access code.&amp;nbsp; You come up with some sort of &lt;a href="http://martinfowler.com/eaaCatalog/repository.html"&gt;Repository&lt;/a&gt; pattern class like this:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;interface&lt;/span&gt; &lt;span&gt;IRepository&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Save(&lt;span style="color:blue;"&gt;object&lt;/span&gt; target);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;Repository&lt;/span&gt; : &lt;span&gt;IRepository&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; Repository(&lt;span style="color:blue;"&gt;string&lt;/span&gt; connectionString)&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// set up the persistence infrastructure using the connectionString&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// from the constructor argument&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Save(&lt;span style="color:blue;"&gt;object&lt;/span&gt; target)&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// save the object&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Repository class needs to be supplied with the “connectionString” in its constructor.&amp;nbsp; No problem, just set up the value of the constructor argument in the bootstrapping:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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;ObjectFactory&lt;/span&gt;.Initialize(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;()&lt;/p&gt;

  &lt;p style="margin:0px;"&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; .WithCtorArg(&lt;span&gt;&amp;quot;connectionString&amp;quot;&lt;/span&gt;).EqualTo(&lt;span&gt;&amp;quot;a connection string&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// Or, since it&amp;#39;s smelly to embed a connection string directly into code,&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// we could pull the connection string from the AppSettings&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;()&lt;/p&gt;

  &lt;p style="margin:0px;"&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; .WithCtorArg(&lt;span&gt;&amp;quot;connectionString&amp;quot;&lt;/span&gt;).EqualToAppSetting(&lt;span&gt;&amp;quot;CONNECTION-STRING&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;With the bootstrapping out of the way, when we ask StructureMap for an IRepository in this code:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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;var&lt;/span&gt; repository = &lt;span&gt;ObjectFactory&lt;/span&gt;.GetInstance&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;StructureMap will look up the “CONNECTION-STRING” value in the AppSettings portion of the App.config file, and use that string value to invoke the constructor function of the Repository class, then hand back that new Repository object.&amp;nbsp; Woo hoo.&amp;nbsp; We can build an object that doesn’t depend on anything, and we can build an object that needs some strings in its constructor function.&amp;nbsp; How about objects that need other non-primitive objects?&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Auto wiring&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;In the code samples above, I used StructureMap as a Service Locator in the ClassThatGetsAnIValidator.SaveObject() method.&amp;nbsp; Typically, you’ll try to minimize the number of service locator usages in your system to a bare minimum (I found 8 in my current system, but I think I’ll find a way to prune half of those later).&amp;nbsp; Most of the value of an IoC tool is in automatically doing Dependency Injection.&amp;nbsp; I’m working with the new MVC framework at the moment, so it’s a handy sample.&amp;nbsp; Let’s say that we have a Controller class for a typical CRUD screen.&amp;nbsp; That Controller class will generally need to interact with both validation services and the data access functionality of the Repository.&amp;nbsp; Here’s a representative Controller class:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span&gt;SomeScreenController&lt;/span&gt; : &lt;span&gt;IController&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span&gt;IRepository&lt;/span&gt; _repository;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span&gt;IValidator&lt;/span&gt; _validator;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// SomeScreenController depends on both IRepository and IValidator&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; SomeScreenController(&lt;span&gt;IRepository&lt;/span&gt; repository, &lt;span&gt;IValidator&lt;/span&gt; validator)&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _repository = repository;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _validator = validator;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;So let’s get StructureMap set up for this SomeScreenController class:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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;ObjectFactory&lt;/span&gt;.Initialize(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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:green;"&gt;// Set up the IValidator&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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; x.ForRequestedType&amp;lt;&lt;span&gt;IValidator&lt;/span&gt;&amp;gt;().TheDefaultIsConcreteType&amp;lt;&lt;span&gt;Validator&lt;/span&gt;&amp;gt;();&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;// Set up the IRepository&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;()&lt;/p&gt;

  &lt;p style="margin:0px;"&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; .WithCtorArg(&lt;span&gt;&amp;quot;connectionString&amp;quot;&lt;/span&gt;).EqualToAppSetting(&lt;span&gt;&amp;quot;CONNECTION-STRING&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;You’ll notice that we didn’t make any explicit configuration for the SomeScreenController class, but yet we could now call:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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:blue;"&gt;var&lt;/span&gt; controller = &lt;span&gt;ObjectFactory&lt;/span&gt;.GetInstance&amp;lt;&lt;span&gt;SomeScreenController&lt;/span&gt;&amp;gt;();&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;and StructureMap will happily create a new instance of the SomeScreenController class by invoking its constructor and passing in a new Validator object and a new Repository object created with the connection string from the App.config file.&amp;nbsp; We didn’t need to tell StructureMap how to construct SomeScreenController because: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;StructureMap can look at the constructor function of SomeScreenController and see that it depends on IValidator and IRepository &lt;/li&gt;

  &lt;li&gt;StructureMap “knows” about the default way to create and return an IValidator and an IRepository &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feature is known as “auto wiring,” and all the mainstream IoC containers support this to some extent or another.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/h4&gt;

&lt;h4&gt;&lt;strong&gt;What to do when things go wrong?&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;StructureMap, and any other IoC tool for that matter, is configuration intensive – which means that their will be problems in that configuration.&amp;nbsp; We’re all moving to more convention based type registration – which means that more stuff is happening off stage and out of your sight, making debugging the configuration even trickier.&amp;nbsp; Not to worry (too much), StructureMap has some diagnostic abilities to help you solve configuration problems.&amp;nbsp; The quickest tool is to ask a Container object or ObjectFactory (which is just a static wrapper around a Container) “what do you have?” with the Container.WhatDoIHave() method like this below:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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;var&lt;/span&gt; container = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Container&lt;/span&gt;(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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; x.ForRequestedType&amp;lt;&lt;span&gt;IValidator&lt;/span&gt;&amp;gt;().TheDefaultIsConcreteType&amp;lt;&lt;span&gt;Validator&lt;/span&gt;&amp;gt;();&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;()&lt;/p&gt;

  &lt;p style="margin:0px;"&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; .WithCtorArg(&lt;span&gt;&amp;quot;connectionString&amp;quot;&lt;/span&gt;).EqualToAppSetting(&lt;span&gt;&amp;quot;CONNECTION-STRING&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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;Debug&lt;/span&gt;.WriteLine(container.WhatDoIHave());&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;Which would spit out this text into your output window:&lt;/p&gt;

&lt;pre&gt;===========================================================================================================
Configuration Sources:

0)   Registry:  StructureMap.ConfigurationExpression,StructureMap


===============================================================================================================================================================================================================================================================================================================================
PluginType                                                                                                                Name                                                                                                 Description                                                                                     
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ShadeTree.Validation.IValidator, ShadeTree, Version=0.8.0.0, Culture=neutral, PublicKeyToken=null                         ShadeTree.Validation.Validator, ShadeTree, Version=0.8.0.0, Culture=neutral, PublicKeyToken=null     ShadeTree.Validation.Validator, ShadeTree, Version=0.8.0.0, Culture=neutral, PublicKeyToken=null
Built by:  StructureMap.Pipeline.BuildPolicy

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
StructureMapSample.IRepository, DovetailCRM.IntegrationTesting, Version=0.9.0.0, Culture=neutral, PublicKeyToken=null     27fdf13e-8adc-4f8f-9f53-cf7b35ada80c                                                                 Smart Instance for StructureMapSample.Repository                                                
Built by:  StructureMap.Pipeline.BuildPolicy

===============================================================================================================================================================================================================================================================================================================================&lt;/pre&gt;

&lt;p&gt;which is admittedly, not the prettiest looking thing in the world.&lt;/p&gt;

&lt;p&gt;You can also “assert” that the configuration for a Container or ObjectFactory is complete by calling the Container.AssertConfigurationIsValid() method like this sample below:&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&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;var&lt;/span&gt; container = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Container&lt;/span&gt;(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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; x.ForRequestedType&amp;lt;&lt;span&gt;IValidator&lt;/span&gt;&amp;gt;().TheDefaultIsConcreteType&amp;lt;&lt;span&gt;Validator&lt;/span&gt;&amp;gt;();&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;()&lt;/p&gt;

  &lt;p style="margin:0px;"&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; .WithCtorArg(&lt;span&gt;&amp;quot;connectionString&amp;quot;&lt;/span&gt;).EqualToAppSetting(&lt;span&gt;&amp;quot;CONNECTION-STRING&amp;quot;&lt;/span&gt;);&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.AssertConfigurationIsValid();&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;This method will analyze every thing in the Container configuration and:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Look for any missing constructor or mandatory setter arguments &lt;/li&gt;

  &lt;li&gt;Look for any unknown dependency types &lt;/li&gt;

  &lt;li&gt;Look for any errors in the Xml configuration (if you’re using Xml configuration) &lt;/li&gt;

  &lt;li&gt;Try to build each and every type and named instance in the configuration – i.e. this is a complete, but relatively expensive operation &lt;/li&gt;

  &lt;li&gt;Run any environment tests configured with the [ValidationMethod] attribute (&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/04/06/142431.aspx"&gt;a feature that is unique to StructureMap as far as I know&lt;/a&gt;) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The previous sample is a valid configuration, but let’s look at an invalid configuration.&amp;nbsp; Let’s omit the configuration of the “connectionString” constructor argument for the Repository class and try AssertConfigurationIsValid():&lt;/p&gt;

&lt;div style="border:thin solid black;background:white none repeat scroll 0% 0%;overflow:scroll;font-size:10pt;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;color:black;font-family:courier new;"&gt;
  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span&gt;Test&lt;/span&gt;]&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; lets_see_if_the_container_is_valid()&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;

  &lt;p style="margin:0px;"&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;var&lt;/span&gt; container = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span&gt;Container&lt;/span&gt;(x =&amp;gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&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; x.ForRequestedType&amp;lt;&lt;span&gt;IRepository&lt;/span&gt;&amp;gt;().TheDefault.Is.OfConcreteType&amp;lt;&lt;span&gt;Repository&lt;/span&gt;&amp;gt;();&lt;/p&gt;

  &lt;p style="margin:0px;"&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:green;"&gt;//.WithCtorArg(&amp;quot;connectionString&amp;quot;).EqualToAppSetting(&amp;quot;CONNECTION-STRING&amp;quot;);&lt;/span&gt;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.AssertConfigurationIsValid();&lt;/p&gt;

  &lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;When I run the unit test above, this is part of the output:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;pre&gt;Build Error on Instance &amp;#39;73b7f21b-bbfd-462c-854d-5b2a2f98ba50&amp;#39; (Smart Instance for StructureMapSample.Repository)
    for PluginType StructureMapSample.IRepository, DovetailCRM.IntegrationTesting, Version=0.9.0.0, Culture=neutral, PublicKeyToken=null

StructureMap.StructureMapException: StructureMap Exception Code:  205
Missing requested Instance property &amp;quot;connectionString&amp;quot; for InstanceKey &amp;quot;73b7f21b-bbfd-462c-854d-5b2a2f98ba50&amp;quot;&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;which again, isn’t the prettiest thing in the world, but it does tell me that the “connectionString” argument is missing for the Repository class.&amp;nbsp; After seeing this output, I think that this output and error wording will get improved in an upcoming release.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Why are you still rolling your own IoC tool?&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;Something that bothers me pretty is when I see bloggers frequently say that “StructureMap/Windsor/Ninject/Unity/Spring.Net/Autofac” is way too heavy for my project, so I just rolled my own.&amp;nbsp; Why?&amp;nbsp; Why would you do that?&amp;nbsp; Bootstrapping StructureMap for the very simplest cases, i.e. the only cases you can handle with the “roll your own IoC container in 30 lines of code solution,” takes 1 line of code for the call to ObjectFactory.Initialize() plus another line of code for each individual type.&amp;nbsp;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;Related Links:&lt;/strong&gt;&lt;/h4&gt;

&lt;p&gt;By no possible means was this a complete guide to using StructureMap or IoC tools in general.&amp;nbsp; Try these other links for more on StructureMap:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://flimflan.com/blog/HelloStructureMap.aspx"&gt;Hello StructureMap&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://frickinsweet.com/ryanlanciaux.com/post/Very-Quick-and-Simple-Dependency-Injection-with-StructureMap.aspx"&gt;Very Quick and Simple Dependency Injection with StructureMap&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://dimecasts.net/Casts/ByTag/StructureMap"&gt;StructureMap on DimeCasts&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/25/initializing-and-configuring-a-structuremap-container.aspx"&gt;Initializing and Configuring a StructureMap Container&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/25/embedding-structuremap-configuration-into-the-app-config-file.aspx"&gt;Embedding StructureMap configuration into the App.config file&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/25/the-structuremap-config-file.aspx"&gt;The StructureMap.Config File&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/18/using-the-structuremap-container-independent-of-objectfactory.aspx"&gt;Using the StructureMap Container independent of ObjectFactory&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/18/profile-s-in-structuremap.aspx"&gt;Profile’s in StructureMap&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/18/using-structuremap-2-5-to-scan-all-assemblies-in-a-folder.aspx"&gt;Using StructureMap 2.5 to scan all assemblies in a folder&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/08/setter-injection-in-structuremap-2-5.aspx"&gt;Setter Injection in StructureMap 2.5&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/09/25/using-structuremap-2-5-to-inject-your-entity-objects-into-services.aspx"&gt;Using StructureMap 2.5 to inject your Entity objects into Services&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/09/10/using-the-structuremap-container-independently-of-objectfactory.aspx"&gt;Using the StructureMap Container independently of ObjectFactory&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/08/20/smartinstance-in-structuremap-2-5.aspx"&gt;“SmartInstance” in StructureMap 2.5&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devlicio.us/blogs/derik_whittaker/archive/2008/08/13/contextual-binding-with-structuremap-2-5.aspx"&gt;Contextual Binding with StructureMap 2.5&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/chad_myers/archive/2008/06/11/neat-tricks-with-structuremap.aspx"&gt;Neat Tricks with StructureMap&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/07/29/integrating-structuremap-with-wcf.aspx"&gt;Integrating StructureMap with WCF&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185447" width="1" height="1"&gt;</description><category domain="http://codebetter.com/blogs/jeremy.miller/archive/tags/StructureMap/default.aspx">StructureMap</category></item><item><title>Agile .Net Developer Opportunity in Atlanta</title><link>http://codebetter.com/blogs/jeremy.miller/archive/2008/11/30/agile-net-developer-opportunity-in-atlanta.aspx</link><pubDate>Sun, 30 Nov 2008 17:07:00 GMT</pubDate><guid isPermaLink="false">d21fbbc9-c112-4f32-ad14-95939a2c53d4:185440</guid><dc:creator>Jeremy D. Miller</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://codebetter.com/blogs/jeremy.miller/rsscomments.aspx?PostID=185440</wfw:commentRss><comments>http://codebetter.com/blogs/jeremy.miller/archive/2008/11/30/agile-net-developer-opportunity-in-atlanta.aspx#comments</comments><description>&lt;p&gt;My friend and former colleague Paul Gale is looking to build a strong Agile .Net team in Atlanta.&amp;nbsp; If you&amp;#39;re interested, here are the details from the man himself:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;I am looking to build a team of up to 6 (including myself)
experienced agile .NET developers by the end of 2009.&amp;nbsp; However, we&amp;#39;re
trying to hire in a more opportunistic mode, i.e., if a decent
developer is available we&amp;#39;ll take a look at them, rather than spread it
out just to fit a hiring program. &lt;/li&gt;&lt;li&gt;The company is called Cint. We&amp;#39;re HQ&amp;#39;d in Stockholm (It will be
easier to explain the exact relationship between the Atlanta dev group
and our Stockholm dev group to candidates directly).&lt;/li&gt;&lt;li&gt;Candidates should have a strong background in TDD ideally in an XP environment. We&amp;#39;ll be pairing too. &lt;br /&gt;
&lt;/li&gt;&lt;li&gt;More to the point this is NOT the type of position
where someone who fancies trying their hand at TDD, say, should apply.
You will be tested!&amp;nbsp; We&amp;#39;re looking for strong players who will bring
their game with them. &lt;br /&gt;
&lt;/li&gt;&lt;li&gt;Skills aren&amp;#39;t everything though; they must be a good social fit for the team that&amp;#39;s already in place. &lt;/li&gt;&lt;li&gt;We&amp;#39;re currently renting space in &lt;span style="background:transparent none repeat scroll 0% 0%;cursor:pointer;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;" class="yshortcuts" id="lw_1228064407_0"&gt;downtown Atlanta&lt;/span&gt;. However, we&amp;#39;re looking to move very soon to &lt;span style="background:transparent none repeat scroll 0% 0%;cursor:pointer;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;" class="yshortcuts" id="lw_1228064407_1"&gt;Alpharetta, GA&lt;/span&gt; close to G400.&amp;nbsp; (Local folks will know what that means. Others can ask).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;See &lt;a href="http://www.cint.com/Cpx/About.aspx"&gt;http://www.cint.com/Cpx/About.aspx&lt;/a&gt; for more details.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://codebetter.com/aggbug.aspx?PostID=185440" width="1" height="1"&gt;</description></item></channel></rss>