I found a way to do ordered multi-bindings, because I needed this too:
(admittedly very similar to my answer here: https://mcmap.net/q/775066/-inject-array-of-interfaces-in-ninject)
// Binding
public sealed class FooModule: NinjectModule
{
public opverride void Load()
{
Bind<IReadOnlyList<IFoo>>().ToMethod(c=>new IFoo[]
{
c.Kernel.Get<FooType1>(),
c.Kernel.Get<FooType2>(),
...
});
}
}
// Injection target
public class InjectedClass {
public InjectedClass(IReadOnlyList<IFoo> foos) { ;}
}
I agree that just specifying that future versions will preserve the declaration order is a better solution, but this workaround works.
I would have liked to create the child object c within the context c, so Get would know it was being injected into InjectedClass, but I could not figure out how to do that.