I’m interested in reading about the various ways other developers and architects deal with the customization of certain areas of their applications for certain sites. Call outs to customer implemented pre and post processing, events doing the same, allowing business logic methods to be overridden, using strategies with pluggable modules, data configurable processes, e.g. rule engines, scripting, etc.
The list could go on, but I’m asking who used what and what the pros and cons are of each of these approaches, as well as what other approaches there are.
This assumes we don’t create a customer specific code branch to accommodate these customizations.
MS is working on two different frameworks for this in .NET: the Managed Extensibility Framework and System.Addin.
Probably the most commonly used way applications expose extensibility is through Dependency Injection/Inversion of Control mixed with runtime type resolution. That means, you let an external entity ‘inject’ the implementation of an interface at runtime instead of binding to a specific implementation at compile time. Your code doesn’t care if your IRepository is written by your company or by a 3rd party. By coding against interfaces and using DI/IOC frameworks (this link provides a great overview of .NET frameworks) you allow your application to be easily customizable.