I need a C# plug-in manager that loads and manages C++ Dlls, and makes them available to an application framework.
Here are the requirements:
1). Design patterns should be used whenever possible, to make for a robust OO Plug-in architecture
2). Plug-in architecture supporting DLLs
3). Plug-in architecture must supports plugins for diferent modules (i.e. different interfaces)
4). Plug-in modules (i.e. the DLLs) must be written in native (i.e. "unmanaged") C++
5). The interfaces (i.e. object model) exposed by the Dlls must have methods capable of accepting pointers and function callbacks, as well as standard types (*int, float, char etc)
6). Exceptions occuring in the C++ code should be handled gracefully at the C# end
7). Plug-in manager will check in its Plug-ins folder and will attempt to load any DLLs it finds there.
8). Plug-in Manager will log attempts to load Plug-in dlls and will provide feedback (that may be displayed on a GUI hosted by the application framework for example), to explain its progress during loading the Dlls
9). After loading the plug-ins, the objects exposed by the modules become available for use by the application framework incorporating the plug-in architecture
10). The application framework incorporating the plug-in architecture may interogate the Plug-in manager to find which plug-ins have been succesfully loaded and are avaialable. The information returned from the plug-in manager must contain the following fields at the minimum: name, description, company, version, build number, status
The coder must be familiar with the various rules for loading assemblies, and the benefits and drawbacks of each type of assembly loading. The coder must also be experienced in managed C++/unmanaged C++ interoperatability issues.
You will be required to provide the following upon completion of the project:
1). Brief architectural design document
2). Document that shows how to create a new module in unmanaged C++ (i.e. expose a new object model interface)
3). Sample plugin modules for testing (at least one plug-in module must export a heirarchical object model, that accepts pointers and function pointers in at least one of its exposed methods)
4). A test application that uses the plug-in framework, that has plug-in modules made available through the plugin manager, interrogates the plugins loaded (from plugin folder) and uses the object models exposed by the test plug-in modules.
5). CPP unit tests for the framework (possibly using CppUnit)
Additionally, you must provide:
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
Windows 98 and above