Contextual bindings with Ninject 2.0

后端 未结 1 1640
轮回少年
轮回少年 2020-12-06 13:14

In Ninject 1.0 I had following binding definitions:

Bind().To().Only(When.Context.Variable(\"variable\").EqualTo(true));
Bind&l         


        
相关标签:
1条回答
  • 2020-12-06 13:55

    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);
    }
    
    0 讨论(0)
提交回复
热议问题