2009-11-05 2 views
0

이름 (= 키)으로 구분하고 액세스 할 수있는 여러 유사한 서비스를 만들고 싶습니다. 나는이 같은 c'tor 종속성이 클래스를 사용하려면 서비스 구현을 위해 c'tor 종속성을 사용하여 서비스의 여러 구성 요소를 만드는 방법

: 내가 뭘하려

public interface IXYService 
{ 
string Tag { get; set; } 
} 

public class _1stXYService : IXYService 
{ 
public _1stXYService(string Tag) 
    { 
     this.Tag = Tag; 
    } 

    public string Tag { get; set; } 
} 

는 주어진 키를 통해 액세스 만든 콘크리트 인스턴스를 가지고 'AddComponentWithProperties'를 사용하는 것이 었습니다 :

... 
    IDictionary l_xyServiceInitParameters = new Hashtable { { "Tag", "1" } }; 
    l_container.AddComponentWithProperties 
     (
      "1st XY service", 
      typeof(IXYService), 
      typeof(_1stXYService), 
      l_xyServiceInitParameters 
     ); 

    l_xyServiceInitParameters["Tag"] = "2"; 
    l_container.AddComponentWithProperties 
     (
      "2nd XY service", 
      typeof(IXYService), 
      typeof(_1stXYService), 
      l_xyServiceInitParameters 
     ); 
... 

var service = l_container[serviceName] as IXYService; 

그러나 종속성은 해결되지 않았으므로 서비스를 사용할 수 없습니다.

IWindsorContainer.Resolve (...)를 사용하여 매개 변수를 채우는 것은 바람직하지 않습니다.

XML로 작성하지만 모든 경우에 충분하지는 않습니다.

어떻게하면 내 목표를 달성 할 수 있습니까?

+0

그래서 당신은 그것의 태그 속성에 의해 서비스를 해결하려면를? –

+0

모든 윈저 구성 요소에는 문자열 인 ID가 있습니다. 충분하니? 아니면 자신의 태그 속성이 있어야합니까? –

+0

ID는 'AddComponentWithProperties'를 사용하는 경우 'key'매개 변수로 완전히 적합합니다. 이 예에서는 "1st XY 서비스"및 "2nd XY 서비스"키가 있습니다. – apollo

답변

2

당신이 등록 타임에 태그 속성 정의하기 위해 찾고 있다면 :

[Test] 
public void Named() { 
    var container = new WindsorContainer(); 
    container.Register(Component.For<IXYService>() 
     .ImplementedBy<_1stXYService>() 
     .Parameters(Parameter.ForKey("Tag").Eq("1")) 
     .Named("1st XY Service")); 
    container.Register(Component.For<IXYService>() 
     .ImplementedBy<_1stXYService>() 
     .Parameters(Parameter.ForKey("Tag").Eq("2")) 
     .Named("2nd XY Service")); 

    Assert.AreEqual("2", container.Resolve<IXYService>("2nd XY Service").Tag); 
} 
+0

Mauricio에게 고맙습니다. 의도대로 작동합니다. X-mas에 대한 나의 위시리스트에있는 "Windsor Castle"에 책을 집어 넣어서 컨테이너 안팎으로 물건을 밀거나 당길 수있는 여러 가지 방법을 찾아야한다고 생각합니다. – apollo

+0

이봐, 고려되고있어 ;-) http://castle.uservoice.com/pages/16605-official-castle-project-feedback-forum/suggestions/327076-we-should-write-a-using-castle-book ? ref = 제목 –

관련 문제