title: How To Create a Flexible Plug-In Architecture?
body: <p>A repeating theme in my development work has been the use of or creation of an in-house plug-in architecture.  I've seen it approached many ways - configuration files (XML, .conf, and so on), inheritance frameworks, database information, libraries, and others.  In my experience:</p>
  
  <ul>
  <li>A database isn't a great place to store your configuration information, especially co-mingled with data</li>
  <li>Attempting this with an inheritance hierarchy requires knowledge about the plug-ins to be coded in, meaning the plug-in architecture isn't all that dynamic</li>
  <li>Configuration files work well for providing simple information, but can't handle more complex behaviors</li>
  <li>Libraries seem to work well, but the one-way dependencies have to be carefully created.</li>
  </ul>
  
  <p>As I seek to learn from the various architectures I've worked with, I'm also looking to the community for suggestions.  How have you implemented a SOLID plug-in architecture?  What was your worst failure (or the worst failure you've seen)?  What would you do if you were going to implement a new plug-in architecture?  What SDK or open source project that you've worked with has the best example of a good architecture?</p>
  
  <p>A few examples I've been finding on my own:</p>
  
  <ul>
  <li>Perl's <a href="http://search.cpan.org/~simonw/Module-Pluggable-3.9/lib/Module/Pluggable.pm" rel="noreferrer">Module::Plugable</a> and <a href="http://www.drdobbs.com/web-development/184416179" rel="noreferrer">IOC</a> for dependency injection in Perl</li>
  <li><a href="http://www.springsource.org/" rel="noreferrer">The various Spring frameworks</a> (Java, .NET, Python) for dependency injection.</li>
  <li>An <a href="https://stackoverflow.com/questions/1613935/java-plugin-framework-choice">SO question</a> with a list for Java (including <a href="http://en.wikipedia.org/wiki/Service_Provider_Interface" rel="noreferrer">Service Provider Interfaces</a>)</li>
  <li>An <a href="https://stackoverflow.com/questions/43322/whats-safe-for-a-c-plug-in-system">SO question</a> for C++ pointing to a <a href="http://www.drdobbs.com/cpp/204202899;jsessionid=2P021EF4CUUAFQE1GHPSKH4ATMY32JVN?cid=RSSfeed%255FDDJ%255FCpp" rel="noreferrer">Dr. Dobbs article</a></li>
  <li>An <a href="https://stackoverflow.com/questions/340183/plug-in-architecture-for-asp-net-mvc">SO question</a> regarding a specific plugin idea for ASP.NET MVC</li>
  </ul>
  
  <p>These examples seem to play to various language strengths.  Is a good plugin architecture necessarily tied to the language?  Is it best to use tools to create a plugin architecture, or to do it on one's own following models?</p>