2012-08-09 2 views
1

시험은 아래의 마지막이 메시지와 Assert() 실패 : "ARG2" 그러나이었다 : 예상 "ARG1은"Windsor의 Typed Factory가 생성자 인수로 전달 된 이유는 처음입니까?

그것은 "arg1"이 처음 통과 할 때 보인다 -이 기억 공장을 입력하고 두 번째 통화에서 "arg2" 무시합니다. 왜?

public class E 
{ 
    public string Arg { get; set; } 

    public E(string arg) 
    { 
     Arg = arg; 
    } 
} 

public interface IEFactory 
{ 
    E Create(string arg); 
} 

[Test] 
public void TypedFactoryWorksAsExpected() 
{ 
    var windsor = new WindsorContainer(); 
    windsor.Kernel.AddFacility<TypedFactoryFacility>(); 
    windsor.Register(
     Component.For<E>(), 
     Component.For<IEFactory>().AsFactory()); 

    var factory = windsor.Resolve<IEFactory>(); 
    var e1 = factory.Create("arg1"); 
    var e2 = factory.Create("arg2"); 

    Assert.AreEqual("arg1", e1.Arg); 

    // This line fails with message: 
    // 'Expected: "arg2" But was: "arg1".' 
    Assert.AreEqual("arg2", e2.Arg); 
} 

답변

1

기본적으로 윈저 구성 요소는 싱글 톤입니다. E은 다른 것을 지정하지 않았기 때문에 싱글 톤입니다. 두 번째 호출은 인수를 무시하지 않지만 단일 인스턴스이기 때문에 이전 인스턴스를 다시 사용합니다.

당신은 E은 일시적인 것으로 정의 할 수 있습니다

windsor.Register(Component.For<E>().LifeStyle.Transient); 
+0

그래, 내가 이미 알아 냈 내 자신의 대답을 기록했지만, 당신은 저를 상회했습니다. 참으로 정답입니다. –