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