Geeks With Blogs
ArchitectNow Kevin Grossnicklaus' Blog

Last Monday night I gave a presentation at the local St. Louis .NET user group (  My presentation was on some of the new extensibility infrastructures available in .NET.  More specifically, I talked about  IoC/DI containers, the Managed Extensibility Framework (MEF), and CLR Add-Ins via the System.AddIn infrastructure.

While these user group presentations usually range from 10,000 foot marketing overviews of products all the way down to "in the weeds" developer discussions, I intentionally picked a topic that was probably more technical than most and which covered a lot of technologies not generally thought about by the average developer.   I'm sure more than a few of the attendees were out of their comfort zone in terms of how they approach designing software.   With frameworks like the CompositeWPF guidance bringing IoC to the attention of more and more developers every day, I think it is important that even the less experienced developers start putting thought into the correct way to design extensible applications. 

My guess is that designing software for change (or growth) isn't necessarily something that is a priority to your average developer although, with technologies like IoC containers and MEF it's actually something that is much easier to do today than it was just a few years back.   As part of my day-to-day job at SSE I am involved heavily with the design and architecture of frameworks and platforms which our clients use as the foundation of their key applications.  As part of this responsibility, I am forced to design frameworks that are extremely flexible and most (if not all) of the key subsystems of my frameworks must be replaceable or customizable with very little effort by my clients.  Don't get me wrong, I also like to think that my frameworks actually DO SOMETHING out of the box, but, if the client doesn't like what a certain piece does, they can swap it out seamlessly for their own implementation.  Designing frameworks to be this flexible is not a new goal and neither are most of the patterns and technologies used to achieve that flexibility.  I think the issue is really that too many developers have spent too long simply opening a form, slapping a button on it, and putting code behind the button.  Unfortunately this is too easy to do and you aren't really forced to design for change until you are backed up against a wall and asked to change what you've written.   Even then, unless you understand and appreciate the elegance of extensible applications you probably see nothing wrong with simply editing your code over and over again when asked.  If your application needs new functionality, slap on a new button and go.  It's as simple as that, right?

Anyway, let me know your thoughts if you find yourself reading this.

Also, if you are interested in learning more about these infrastructures, check out the following links:

Also, the MEF team recently shipped a new tech preview of the next version.  Check out Brad Abram's blog about that here:

Anyway, more extensibility discussions to stay tuned!

Posted on Wednesday, November 26, 2008 3:36 PM | Back to top

Comments on this post: .NET Extensibility talk at the St. Louis' .NET User Group

No comments posted yet.
Your comment:
 (will show your gravatar)

Copyright © Kevin Grossnicklaus | Powered by: