Можно ли создавать объекты с круговыми ссылками в Unity? - PullRequest
2 голосов
/ 08 декабря 2010
public interface IBaz { IBar bar { get; set; } }
public class Baz : IBaz
{
    public IBar bar { get; set;  }
    public Baz(IBar bar) { this.bar = bar;  }
}

public interface IBar { IBaz baz { get; set;  } }
public class Bar : IBar
{
    public IBaz baz { get; set; }
    public Bar(IBaz baz) { this.baz = baz; }
}

class Program
{
    static void Main(string[] args)
    {
        IUnityContainer container = new UnityContainer();

        container.RegisterType<IBar, Bar>(new ContainerControlledLifetimeManager());
        container.RegisterType<IBaz, Baz>(new ContainerControlledLifetimeManager());

        //Problem 1: I get a stack-overflow, but I am using the singleton lifetime manager?
        var bar = container.Resolve<IBar>(); 
        var baz = container.Resolve<IBaz>();

        //Problem 2: I want Unity to do this automatically for me. How?
        bar.baz = baz; baz.bar = bar;

        var result = object.ReferenceEquals(bar, baz.bar) && object.ReferenceEquals(baz, bar.baz); 
    }

1 Ответ

1 голос
/ 10 декабря 2010

Нет, не сейчас.Объект не считается «созданным» до тех пор, пока не будут установлены все свойства, поэтому он не сохраняется в менеджере времени жизни до тех пор, пока это не произойдет.Что приводит к переполнению стека в этом случае.

...