Once you have these setup in your main application, you can write the plug-ins based on the interfaces and base classes. Your main application will invoke events and based on what events you are subscribed to, your plug-in class will be called. An object with current state will be passed to your class as the event args.
During the application start-up, check for any plug-in files in the configuration file and cache an instance of all plug-ins in an application variable. On all defined events, loop through this array and call the appropriate method to invoke the plug-in method.
download code
-paul