1

オブジェクトを正しい方法で解決するために、ウィンザーで「グラフごと」のライフスタイルをシミュレートしようとしています。私はバインドされたライフスタイルを試しましたが、おそらくこのテーマに関する知識が不足しているため、成功しませんでした. 必要なものは、次のコード例で表現されています。

class Program
{
    static void Main( string[] args )
    {
        var container = new WindsorContainer();
        container.Register(
            Component.For<ClassA>().LifestyleBoundTo<ClassC1>(),
            //Component.For<ClassA>().LifestyleBoundTo<ClassC2>(),
            Component.For<ClassB1>().LifeStyle.Transient,
            Component.For<ClassB2>().LifeStyle.Transient,
            Component.For<ClassC1>().LifeStyle.Transient,
            Component.For<ClassC2>().LifeStyle.Transient );

        var c1 = container.Resolve<ClassC1>();
        Assert.AreSame( c1.B1.A, c1.A );

        var c2 = container.Resolve<ClassC2>();
        Assert.AreSame( c2.B2.A, c2.A );

        Assert.AreNotSame( c1.A, c2.A );
    }
}

class ClassA
{
}

class ClassB1
{
    public ClassB1( ClassA a)
    {
        A = a;
    }

    public ClassA A { get; set; }
}

class ClassC1
{
    public ClassC1( ClassA a, ClassB1 b1 )
    {
        A = a;
        B1 = b1;
    }

    public ClassA A { get; set; }
    public ClassB1 B1 { get; set; }
}

class ClassB2
{
    public ClassB2( ClassA a )
    {
        A = a;
    }

    public ClassA A { get; set; }
}

class ClassC2
{
    public ClassC2( ClassA a, ClassB2 b2 )
    {
        A = a;
        B2 = b2;
    }

    public ClassA A { get; set; }
    public ClassB2 B2 { get; set; }
}

}
4

1 に答える 1

0

わかりましたので、すべて期待どおりに動作します。

最初のアサートは期待どおりにパスします。2 番目は期待どおりに失敗します。これは、ClassAperClassC1をスコープしていて、2 番目の解決のグラフにそのクラスのインスタンスがないためです。

于 2012-05-29T08:09:32.597 に答える