Смоделируйте образ жизни 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; }
}

}

person Antonio    schedule 28.05.2012    source источник
comment
Я также сталкиваюсь с аналогичной проблемой: " title="Общий экземпляр службы внедрения зависимостей между двумя экземплярами"> stackoverflow.com/questions/25064516/ , пожалуйста, дайте мне знать, если вы найдете ответ.   -  person eran otzap    schedule 02.08.2014


Ответы (1)


Итак, все работает так, как ожидалось.

Ваше первое утверждение проходит, как и ожидалось. Второй терпит неудачу, как и ожидалось, поскольку вы определяете область ClassA для ClassC1, а экземпляра этого класса в графе для второго разрешения нет.

person Krzysztof Kozmic    schedule 29.05.2012
comment
Есть ли способ охватить ClassA также для ClassC2? В моем проекте у меня есть специальный класс, на который ссылается множество основных компонентов. Для каждого основного компонента мне нужен только один общий экземпляр этого специального класса. - person Antonio; 29.05.2012
comment
есть ли у ваших основных компонентов общий интерфейс, который они все реализуют? - person Krzysztof Kozmic; 30.05.2012