I think your problem is that: -
ninjectKernel.Get<IValueCalculator>()
evaluates before it is passed to your constructor.
i.e. it is called out of context of the binding.
Instead of updating the object yourself, use your kernel to get an instance of the object.
var shopCartTwo = ninjectKernel.Get<ShoppingCartTwo>();
Note that you are not passing a parameter at all. Ninject will look at the signature of the constructor, work that there is an unresolved dependency, and use the appropriate contextual binding.
source share