I am looking at rewriting part of our application in C # (currently the old VB6 code). The module I'm starting with is responsible for importing data from different systems into our database. About 5-6 times a year, a new client asks us to write a new import for the system used. Currently, this requires us to release a new version of our software for each new import option that we add to the application.
One of the goals of rewriting is to make application support plugins. Each new import can become a separate assembly that the host application will recognize and allow the end user to interact. This, we hope, will simplify life to some extent, since we can simply delete the new assembly in the directory and recognize and use it in the main (host) application.
One of the elements I'm struggling with is related to the differences between the import options that we currently support. In some cases, we actually allow the user to point to the directory and read all the files in the directory in our system. In other cases, we allow them to point to a single file and import its contents. In addition, some imports have a date range limitation that the user applies, while others do not.
My question is how can I create the application in such a way as to provide some flexibility between the assemblies we import and support, while at the same time implementing a common interface that will allow the host application to easily recognize the plug-ins and parameters that each of them provides to the user ?
source share