Laden...

LightCore - StackOverflowException bei Verwendung des eigenen Typens als Parameter im Konstruktor

Erstellt von mouk vor 13 Jahren Letzter Beitrag vor 13 Jahren 6.034 Views
M
mouk Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren
LightCore - StackOverflowException bei Verwendung des eigenen Typens als Parameter im Konstruktor

Hallo,

falls eine Klasse einen ctor besitzt, der eine Instanz der gleichen Klasse erwarten, wird beim Aufruf von Resolve eine StackOverflowException geschmißen. Dies geschieht auch wenn der jenige .ctor privat ist. Der Test dazu:

[TestMethod]
public void NotRegister()
{
    var builder = new ContainerBuilder();
    var container = builder.Build();

    container.Resolve<Tut>();

}
public class Tut 
{
    public Tut()
    {
    }
    private Tut(Tut tut)
    {
    }
}

Man braucht kein Assert, da StackOverflowException zerstörerisch ist. try catch bringt an der Stelle gar nichts.

5.941 Beiträge seit 2005
vor 13 Jahren

Hallo mouk

Vielen Dank für deine Meldung.
Welches Verhalten würdest du denn erwarten?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

M
mouk Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Hallo Peter,

meier Meinung nach sind das hier zwei Punkte zu behandeln:

1 - Der Container soll keine privaten oder internen ctors aufrufen. Unter Umstände sind solche ctors nicht dafür konzipiert, von Außen aufgerufen zu werden und hinterlassen das Objekt in einem ungültigen Zustand.

2 - Zyklische Abhängigkeiten (direkte oder indirekte) müssen zu einer Exception führen, jedoch nicht zu StackOverflowException 😃

Viele Grüße,

Mouk

5.941 Beiträge seit 2005
vor 13 Jahren

Hallo mouk

  1. Da hast du vollkommen Recht und leicht zu ändern.
  2. An der Sache mit den zyklischen Abhängigkeiten muss ich mal rangehen. Priorität haben aber erst mal die anderen Bugs.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

5.941 Beiträge seit 2005
vor 13 Jahren

Hallo mouk

Der erste Bug ist gefixt und ins SVN Repository eingecheckt.
Wenn alle bekannte Bugs gefixt worden sind, gibt es einen neuen Release.

Fixed ReflectionActivator uses non public constructors bug.
see: (LightCore - StackOverflowException bei Verwendung des eigenen Typens als Parameter im Konstruktor).

Beschreibung:
LightCore ruft nur noch öffentliche Konstruktoren ab.

Dem zweiten Problem widme ich mich Morgen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011