2012-05-15 2 views
0

CastleWindsor를 사용하면 구현이 여러 개인 하나의 인터페이스에 대해 여러 라이프 사이클을 구성 할 수 있습니까?하나 이상의 구현이있는 하나의 인터페이스에 대한 복수 라이프 사이클

IFoo 

FooA : IFoo라이프 사이클 : 싱글 라이프 사이클

FooB : IFoo자세한 맥락없이

+0

당신이 더 구체적 일 수 있습니다

또 다른 옵션은 올바른 구현을 반환 대리인 공장을 등록하는 것입니다? 그것은 현재 당신이 성취하고자하는 것에 대해 다소 모호합니다. – Steven

+2

그게 좋지만 충분하지는 않습니다. 어떻게 그들을 해결/주사하고 싶니? IFoo를 주입하고 싶습니까? 그렇다면 언제 'FooA'를 사용해야하고 언제 'FooB'를 사용해야합니까? – Steven

+0

그럼 근본적인 질문은 무엇입니까? 왜 이걸 물어 보는거야? – kko

답변

0

과도 나의 가장 좋은 대답은 다음과 같습니다

public class FooProxy : IFoo 
{ 
    private readonly FooA a; 
    private readonly FooB b; 

    public FooProxy(FooA a, FooB b) 
    { 
     this.a = a; 
     this.b = b; 
    } 

    void IFoo.SomeFooMethod() 
    { 
     this.GetFooBasedOnSomeCondition().SomeFooMethod(); 
    } 

    private IFoo GetFooBasedOnSomeCondition() 
    { 
     return condition ? this.a : this.b; 
    } 
} 

이 프록시 클래스 : 프록시를 사용 FooA 및 01에 따라 다릅니다.이고 이것을 일시적으로 등록하면 IFoo으로 확인할 수 있습니다.

container.AddFacility<FactorySupportFacility>(); 

container.Register(Component.For<IFoo>() 
    .UsingFactoryMethod(() => 
    { 
     return condition 
      ? container.Resolve<FooA>() 
      : container.Resolve<FooB>(); 
    }) 
    .LifeStyle.Transient);