7

En Ninject 1,0 I habían siguientes definiciones de unión:enlaces contextuales con Ninject 2,0

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

Dadas tales fijaciones tuve llamadas:

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

primera llamada fue resuelto a instancia de Destino1, segunda llamada fue resuelto a instancia de Target2.

¿Cómo traducir esto en Ninject 2.0?

+0

voy a echar un vistazo, muy pronto, pero que realmente debería usar la lista de correo para estas cosas. –

+0

Gracias por señalar esto. No sabía acerca de la lista de correo. He vuelto a publicar esta pregunta allí. – Przemaas

+3

@Ian Davis: yo _really_ prefiero TAN a las listas de correo. Si las 101 preguntas pueden estar aquí como respuestas modificables, editables y comentables en lugar de enterradas en una ventisca de correos electrónicos, es simplemente mejor. Pero eso es solo yo, supongo. –

Respuesta

6

Puede utilizar los metadatos,

[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); 
} 
+0

¿Qué sucede cuando realmente necesita el predicado para vivir en el Módulo en lugar de en el sitio Obtener llamada? –

+1

Puede usar kernel.Bind () .To (). Cuando * (...) métodos –

Cuestiones relacionadas