I’m working on a fresh new product that eventually will have different functionality built up around it based on individual customer requirements. Therefore, I’d like to implement the ability to have plugins that I can deploy and the core application will detect the plugins and change accordingly. The kicker is that the product will most likely be targeting earlier versions of .Net that do not support System.Addin or the possibility of MEF.
That said, which patterns/methods of programming lend themselves well to supporting plugins in C#? I’d like to stay away from third party frameworks altogether, although feel free to name one. Ideally, I would like to have the ability to drop in a plugin have it modify the main menu and/or a context menu and/or provide a new service. In Java this was handled nicely via extension points. Am I basically stuck to write my own extension point manager?
You want to look at the System.Reflection namespace to aid you in this task. One approach would be to create a common interface for your plugin classes (lookup strategy pattern) and then use reflection at runtime to look at all the dll’s in a given folder (maybe where the exe is or a special add-in folder) making note of the classes that contain that particular interface. In specific keep a dictionary of the types (the ones with your special interface that designates it as a plugin class). Once you have a list of those types that contain the interface designating them as a plugin you can dynamically instantiate them at will using the System.Activator class. Do the initial probing for the add-in classes at application startup and then use a abstract factory to load the plugin based on type or some other metadata that can be attributed to the class using .net attributes.
If you need specific code examples I can do this for you but, you should take the time to become familiar with System.Reflection, System.Activator, and .net attributes if you intend to build a robust and flexible add-in system.
Enjoy!