Is something like this possible? If so, could you point me in the right direction for learning how?
applicationx tries to run the method start() in dll_one.dll
dll_one.dll runs the command
applicationx tries to run the method run() in dll_one.dll
dll_one.dll doesn't have a method run() and hasn't prepared for such an occurance.
dll_one.dll asks dll_two.dll if it has a run()
dll_two runs run()
Basically, I want it so if dllA doesn’t have a method that the application is looking for, it asks dllB. This is assuming, as well, that ApplicationX and dllB don’t know anything about dllA and dllA kind of just appeared out of nowhere (I want dlls dynamically like a patch to my applications without having to rewrite ALL of the methods, properties, etc. in the dll and have everything else just routed to the old dll).
Any ideas? Keep in mind, I’m using vb.net so a .net reference is appreciated.
The specific thing you ask for isn’t possible. You can’t have a non-existent method call automatically re-routed to a different dll. You can’t “run the method run() in dll_one.dll” unless you’ve compiled that code, and it won’t compile if the method doesn’t exist. You also can’t compile code against dllB and then drop dllA in and have it intercept method calls. Reflection could conceivably solve part of your problem, but you’d not want to base your code around calling all methods by reflection – it’d be horrendously unperformant and not very maintainable.
As Anton suggests, a plugin approach might work. However, this would rely on you being able to specify up-front the interface for your plugin, which sounds like it would contradict your original requirement.
Another problem: if you’d not deployed dllA until later, how would your ApplicationX know to call method start() in dll_one.dll anyway? You’d surely need to re-deploy at least the base application for that part to work.
These kinds of problem are often best solved by having a more specific set of requirements to work to: what functionality are you likely to want to extend or change in the future? Could you support a common set of interfaces that allow extensibility via plugins, or can you need to redeploy encapsulated chunks of your application with new functionality? Is there UI involved or is this just to change back-end logic? Questions like this could help to suggest more viable solutions.