2010-04-12 6 views
1

을 통해 객체를 해석 할 때 나는이 일을 객체를 해결할 수 있습니다지정 A 형 지정된 Ninject에 커널에서 바인딩 클래스 닌자 감안할 때 Ninject에

:

var ninja = ninject.Get<Ninja>(); 

을하지만이 작업을 수행 할 수없는 이유

Type ninjaType = typeof(Ninja); 
var ninja = ninject.Get<ninjaType>(); 

Get을 호출하지 않고 유형을 지정하는 올바른 방법은 무엇입니까?

+0

downvote는 무엇입니까? 내 질문이 명확하지 않은가 - 아니면 너무 바보인가? 그의 downvoted 응답을 삭제 한 사람에 의하여 인 경우에; 그게 당신에게 그 downvote 준 .. 아니었다. – stiank81

+1

Dstto 내 코멘트 http://stackoverflow.com/questions/2620600/specifying-type-when-resolving-objects-through-ninject/2620636#2620636. upvoting. 내가이 넌센스는 없지만 그 멍청한 질문이 아니라면 잘 모르겠다. +1 –

답변

4

형식 인수를 지정하는 것은 런타임 문제가 아니며 정적으로 컴파일됩니다. 유형은 컴파일시 알려 져야합니다. 시나리오에서는 잠재적으로 알려지지 않았거나 런타임에 계산됩니다. 리플렉션을 통해 유형 인수를 지정하는 메소드 호출을 구성 할 수는 있지만 그렇게하고 싶지는 않습니다.

Type ninjaType = typeof(Ninja); 
var ninja = (Ninja)ninject.Get(ninjaType); 

마지막으로, 대부분의 컨테이너가 특정 조건에 제공되어야 형 컨테이너 구성에 지정하는 방법을 제공한다 :

또한, 대부분의 용기는 다음과 같이 보일 것 과부하가 있어야합니다. 나는 Ninject가 어떤 상황에서 어떤 타입이 리턴되어야 하는지를 조건 적으로 명세하기위한 예쁜 DSL을 가지고 있다는 것을 알고있다. 그러나 추상화에 대한 코드를 작성하고 컨테이너가 반환 할 내용을 결정하게하려면 다음을 수행해야합니다.

class DependencyConsumer { 
    ctor(IWarrior warrior) { 
    //Warrior could be a ninja, because e.g. you told NInject 
    //that the dependency should be filled that way for this class 
    } 
} 
+0

감사! 좋은 설명. – stiank81

0

T의 목적은 원하는 유형을 지정하는 것이기 때문에. Ninject는 귀하의 유형 T를 받고 귀하를 대신하여 typeof (T)를 호출합니다. 나는이 방법으로 코드가 더 짧다고 생각한다. 생각하지 않니?

+0

소리가 합리적이다. 형식을 받아야하는 함수가 있습니다. 템플릿 스타일을 받아야합니까? – stiank81

+0

-1er : 내가 이것을 상회했을 지 모르지만, 사실 그것이 정확하고 도움이되지 않는다고 생각합니다. 그러므로 +1은 주석에서 칭의없이 -1을 수행합니다. 산발적 인 -1 주위에 이것과 같이 포스터 +8을 주면됩니다. –

관련 문제