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.
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
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
Hallo mouk
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
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