2011-10-04 57 views
3

我正在嘗試使用ninjects上下文綁定功能根據傳遞給方法的枚舉參數的值綁定到接口的正確實現,並且卡住了。我認爲我可以使用元數據完成此操作。這是我嘗試過的,而且沒有工作。基於方法參數值的Ninject上下文綁定

enum Colors 
    { 
     Red, 
     Blue 
    } 

    public interface IColor 
    {} 

    public class Red : IColor 
    {} 

    public class Blue : IColor 
    {} 

    class Test 
    { 
     private readonly StandardKernel _kernal; 
     public Test() 
     { 
      _kernal = new StandardKernel(); 
      _kernal.Bind<IColor>().To<Red>().WithMetadata("color", Colors.Red); 
      _kernal.Bind<IColor>().To<Blue>().WithMetadata("color", Colors.Blue); 
     } 

     public void TestMethod(Colors color) 
     { 
      IColor iColor = _kernal.Get<IColor>(m => m.Get<Colors>("color") == color); 
     } 
    } 

有什麼想法?謝謝

+1

這是爲我工作。那麼究竟是什麼問題? –

+0

確實,請解釋發生了什麼。它拋出異常嗎? –

+0

投票結束,因爲這個問題目前的形式是無法回答的,而且OP沒有任何迴應。 – Aaronaught

回答

0

是的這有效。如果你用最新的ninject和NUnit創建一個新的類庫,你可以運行以下來驗證:

enum Colors 
{ 
    Red, 
    Blue 
} 

public interface IColor 
{ } 

public class Red : IColor 
{ } 

public class Blue : IColor 
{ } 

class Test 
{ 
    private readonly StandardKernel _kernal; 
    public Test() 
    { 
     _kernal = new StandardKernel(); 
     _kernal.Bind<IColor>().To<Red>().WithMetadata("color", Colors.Red); 
     _kernal.Bind<IColor>().To<Blue>().WithMetadata("color", Colors.Blue); 
    } 

    public IColor TestMethod(Colors color) 
    { 
     return _kernal.Get<IColor>(m => m.Get<Colors>("color") == color); 
    } 
} 

[TestFixture] 
public class TestMetadataFunctions 
{ 
    [Test] 
    public void test_method_should_return_specified_color() 
    { 
     var test = new Test(); 
     var color = test.TestMethod(Colors.Red); 

     Assert.IsInstanceOf(typeof(Red), color); 
    } 
}