Смоделируйте стиль жизни "Per Graph" в замке Виндзор
Я пытаюсь смоделировать стиль жизни "Per Graph" в Виндзоре, чтобы правильно разрешить мои объекты. Я пробовал "Связанный образ жизни", но безуспешно, вероятно, из-за недостатка знаний по этому вопросу. То, что мне нужно, выражено в следующем примере кода:
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; }
}
}
1 ответ
Хорошо, так что все работает как положено.
Ваше первое утверждение проходит, как и ожидалось. Второй сбой, как и ожидалось, так как вы просматриваете ClassA
в ClassC1
и нет экземпляра этого класса в графе для второго разрешения.