2010-01-20 2 views
14

파서 내부에 팩토리 메소드가 있습니다. 기본적으로 토큰을로드 할 때 해당 토큰에 대한 처리기를 찾거나 기본 처리기로 이동합니다. 나는 이것을 switchDictionary<string,Type>으로 구현했지만 두 접근법 모두 처리기 클래스가 아닌 다른 곳에 매핑을 저장해야합니다. 우리는 IOC에 대한 Ninject에를 사용하고 그래서 내가 또한Ninject IOC를 사용하여 공장 교체하기

kernel.Get<ITokenHandler>(tokenName); 

를 사용 할 수 깨달았다하지만 그 2 곳에서 처리 할 수있는 핸들러를 토큰 무엇인지에 대한 정보를 저장하는 저를 저장하지 않습니다

. 이 핸들러를 장식 할 수있는 방법이있어서 자동 매핑이 가능합니까?

답변

11

질문에 올바르게 따라하면 명명 된 바인딩을 검색하는 것처럼 들립니다. 어떤 버전의 Ninject를 사용하고 있는지 언급하지 않았지만 코드 스 니펫에 따라 Ninject 2.0을 사용하고있는 것으로 추측됩니다. 그런 경우 다음 나는 이것이 당신이 당신의 모듈에 바인딩 충분 생각 : 동일한 인터페이스에 많은 구체적인 유형을 결합하여 이름을 구분

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName); 

하고 정확한 구문을 사용하여 검색 귀하의 질문에 명시되어 있습니다.

뭔가 중요한 것이 누락 된 경우 알려주십시오.

+0

조금 늦어서 여기로 돌아 왔습니다. 내가 실제로했던 것은 ITokenHandler concrete 클래스를 마크 업하여 Handler가 선언 된 바인딩을 정의 할 수있는 방법이었다. 나는 이제 당신의 예제를 따라 간다. 바인딩의 모든 bar 1은 패턴이다 : >(). Bind (). Named (tokenName); – baralong

1

내가 사용했던 기술 중 하나는 누군가가 원하는 것을 선택하려는 지점에서 (컨텍스트에서) 매개 변수를 전달할 수있는 방식으로 Bind 물건을 사용하는 것입니다.

http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Contexthttp://ninject.codeplex.com/wikipage?title=Contextual%20Binding 사이에서 선택할 수 있도록 Only(When.Context...)라고 말할 수있는 방식으로 바인딩 할 수 있어야합니까?

+0

단지 다른 답변을 보았습니다 (이 질문에 +1했듯이). 다른 대답은 훨씬 더 명확하고 명확한 접근법처럼 보입니다. 가능하다면 분명히 선호 할 것입니다. 제 접근 방식은 가능한 한 많은 방법으로 구축 될 때보다 일반적인 접근 방식입니다. –

관련 문제