Disable implicit binding/injection of non explicitly bound classes in Ninject 2+
Asked Answered
O

2

9

If you request an unbound object from NInject, then the default behaviour is (if a suitable constructor is available) appears to be to create an instance of the appropriate object.

I'd like to disable this behaviour (I had a difficult to debug issue because something was auto-bound instead of picking up my custom binding in a module). This question hints that it is possible, but I'm unable to find the answer from the NInject wiki.

Ommatophore answered 28/1, 2013 at 15:30 Comment(0)
V
11

Remove the SelfBindingResolver from the kernel components after creation:

kernel.Components.RemoveAll<IMissingBindingResolver>();
kernel.Components.Add<IMissingBindingResolver, DefaultValueBindingResolver>();
Vexatious answered 28/1, 2013 at 16:11 Comment(0)
C
9

The following is a better, more direct way of removing the SelfBindingResolver, without assuming that the DefaultValueBindingResolver is the only other IMissingBindingResolver component:

kernel.Components.Remove<IMissingBindingResolver, SelfBindingResolver>();

It's possible the Remove<T, TImplementation>() method was only added in a recent version of Ninject, but this works for me using Ninject 3.2.2.0.

Cyril answered 16/4, 2014 at 20:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.