1

以下のテストは最後Assert()に次のメッセージで失敗します: Expected: "arg2" But was: "arg1"

"arg1"初めて渡されたときのようです-型付きファクトリはこれを記憶し"arg2"、2回目の呼び出しから無視します。なんで?

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);
}
4

1 に答える 1

1

Windsor コンポーネントはデフォルトでシングルトンです。E他に何も指定しなかったため、あなたはシングルトンです。2 番目の呼び出しは引数を無視しませんが、シングルトンであるため前のインスタンスを再利用します。

Eそれが一時的であることを定義する必要があります。

windsor.Register(Component.For<E>().LifeStyle.Transient);
于 2012-08-09T14:31:24.700 に答える