Identified a bug / missing feature in the IOC bootstrapping and argument matching where multiple constructors looking for different interfaces (that are assignable to one another) it didn't do anything because I'd decided initially that multiple constructors wasn't worth the effort to support, the arg matching logic now checks for explicit interface / base type matches before checking assignable matches to ensure the ctor explicitly matching the arguments supplied is chosen.