I'm writing software that needs to be fairly configurable in nature. At this point what that means is that it first reads in a users configuration file and then builds the objects it needs based on that configuration.
As a result of creating objects based on a users desired functionality it seems to me that Inversion of Control isn't really feasible which makes dependency injection seem impossible.
As an example let's say I need to tell a program to process some data in a certain way. I can configure it when it starts up to process the data with processors A or B or C or even A and C. If I have to construct these objects based on a users configuration then I don't know how to allow for dependency injection.
Is this a scenario where dependency injection isn't appropriate or are there different patterns (which I am unaware of) that solve this problem and allow for dependency injection? If there are other patterns what are they?
I think the root of my question is this:
If I have dependencies A, B, and C and a user can configure the software at startup to use any number of these dependencies (A, A, B or A, B, C or A, C or A, C, C, etc.) how can I do dependency injection when the objects are not singletons and I need to change the necessary dependencies at startup time?