I’m working with dependency injection (DI from now on) to resolve components and am looking for an elegant solution to loading dependent assemblies in a .NET environment. As an explanation, lets say that we have 3 assemblies, A, B and C, where A depends on B and B depends on C. Now I need to load components from assembly A, but because I am using DI, I don’t have a reference to assembly A. And even a reference to assembly A wouldn’t be enough because I somehow need to ensure that A, B and C all end up in my output directory.
So, some obvious solutions are to:
– add references to A, B and C from the executing application: Requires knowledge of the dependency structure which, in my case, is extremely complex, making this a somewhat undesired solution.
– add these dlls to the GAC: Just not an option in my case.
So I’m wondering if anyone has an elegant solution to this issue. Not sure if it’s relevant but I’m using Castle Windsor for DI.
Thanks
Joni
What would it buy you to load the assemblies dynamically?
You should just add references to A, B, and C in the executing application, unless you’re writing an application designed to be extended by other parties, or you have to change the dependencies extremely frequently.
Otherwise, you’re solving a trivial problem (the need to recompile to deploy changes) by introducing a different problem (the possibility of failing at runtime).
Think of the list of references as your application’s constructor arguments – your application should clearly declare its dependencies instead of tucking them away in a config file.