2011-10-04 3 views
3

ninjects 컨텍스트 바인딩 기능을 사용하여 메소드에 전달 된 enum 매개 변수의 값에 기반한 인터페이스의 올바른 구현에 바인드하려고하는데, 막혔습니다. 메타 데이터를 사용하여이 작업을 수행 할 수 있다고 생각했습니다. 여기 내가 시도한 것과 작동하지 않는 것이 있습니다.메소드의 매개 변수 값에 기반한 객체 지향 컨텍스트 바인딩

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); 
    } 
} 
관련 문제