Context bindings with Ninject 2.0

In Ninject 1.0, I had the following binding definitions:

Bind<ITarget>().To<Target1>().Only(When.Context.Variable("variable").EqualTo(true)); Bind<ITarget>().To<Target2>(); 

Given such bindings, I had calls:

 ITarget target = kernel.Get<ITarget>(With.Parameters.ContextVariable("variable", true)); ITarget target = kernel.Get<ITarget>(With.Parameters.ContextVariable("variable", false)); 

The first call was allowed to an instance of Target1, the second call was allowed to an instance of Target2.

How to translate this to Ninject 2.0?

+7
parameters ninject ninject-2
source share
1 answer

You can use metadata,

 [Fact] public void MetadataBindingExample() { string metaDataKey = "key"; kernel.Bind<IWeapon>().To<Shuriken>().WithMetadata(metaDataKey, true); kernel.Bind<IWeapon>().To<Sword>().WithMetadata(metaDataKey, false); kernel.Bind<IWeapon>().To<Knife>(); var weapon = kernel.Get<IWeapon>(metadata => metadata.Has(metaDataKey) && metadata.Get<bool>(metaDataKey)); Assert.IsType<Shuriken>( weapon ); weapon = kernel.Get<IWeapon>(metadata => metadata.Has(metaDataKey) && !metadata.Get<bool>(metaDataKey)); Assert.IsType<Sword>(weapon); weapon = kernel.Get<IWeapon>(metadata => !metadata.Has(metaDataKey)); Assert.IsType<Knife>(weapon); } 
+6
source share

All Articles