myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » LightCore - ResolveAll<T>().ToArray() wirft InvalidOperationException
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

LightCore - ResolveAll<T>().ToArray() wirft InvalidOperationException

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Uwe81 Uwe81 ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.07.2008
Beiträge: 281
Entwicklungsumgebung: Visual Studio 2010/13
Herkunft: Ludwigshafen


Uwe81 ist offline

LightCore - ResolveAll<T>().ToArray() wirft InvalidOperationException

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo!

Folgender Code verursacht eine Exception

C#-Code:
    interface IFoo { }
    class Foo : IFoo { }

    interface IBar { }
    class Bar : IBar {
        public Bar(IEnumerable<IFoo> foos) { }
    }

    public class MainClass {
        public static void Main() {
            var builder = new ContainerBuilder();
            builder.Register<IFoo, Foo>();
            builder.Register<IBar, Bar>();

            IContainer container = builder.Build();
            container.ResolveAll<IBar>().ToArray();
        }
    }

Im Aufruf von ToArray kommt die InvalidOperationException
"Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden."

Stacktrace

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
   bei System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   bei System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.MoveNext()
   bei System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   bei System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   bei System.Linq.Enumerable.<CastIterator>d__aa`1.MoveNext()
   bei System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   bei System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   bei Example.MainClass.Main() in C:\XXXXXX\MainForm.cs:Zeile 30.
   bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   bei System.Threading.ThreadHelper.ThreadStart()

Verwendete Version:
Download von der Homepage: LightCore-1.4.1-net-3.5.zip

Viele Grüße,
Uwe
18.08.2010 16:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Peter Bucher Peter Bucher ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2785.jpg


Dabei seit: 17.03.2005
Beiträge: 5.876
Entwicklungsumgebung: VS08
Herkunft: Zentralschweiz


Peter Bucher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hoi Uwe

Ich habs mal kurz angeschaut (Ohne Debugging).
Der Fehler tritt nur auf, wenn ein "IBar" registriert ist, ab einer Anzahl von mehr als 1 läufts.

Melde mich später wieder, wenn ich den Fehler gefunden habe :).

Jetzt schon vielen Dank für die Rückmeldung!


Gruss Peter
18.08.2010 18:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Uwe81 Uwe81 ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.07.2008
Beiträge: 281
Entwicklungsumgebung: Visual Studio 2010/13
Herkunft: Ludwigshafen

Themenstarter Thema begonnen von Uwe81

Uwe81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
Der Fehler tritt nur auf, wenn ein "IBar" registriert ist, ab einer Anzahl von mehr als 1 läufts.

Ahh, das erklärt, warum der Fehler bei mir plötzlich aufgetaucht ist (und wie ich ihn einfach umgehen kann...)

Vielen Grüße,
Uwe
18.08.2010 18:53 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Peter Bucher Peter Bucher ist männlich
myCSharp.de-Poweruser/ Experte

images/avatars/avatar-2785.jpg


Dabei seit: 17.03.2005
Beiträge: 5.876
Entwicklungsumgebung: VS08
Herkunft: Zentralschweiz


Peter Bucher ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Uwe

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

Fixed ResolveAll throws InvalidOperationException bug.
see: ( LightCore - ResolveAll<T>().ToArray() wirft InvalidOperationException).

Beschreibung:
Wieso das es mit nur einer Registrierung krachte, jedoch mit zwei nicht, ist mir immer noch ein Rätsel.
Das Verhalten sollte eigentlich bei beiden das gleiche sein.

Ich konnte es auch nachvollziehen, jedoch nach meiner Änderung nicht mehr.

Schlussendlich lag es daran, das beim Aufruf von ResolveAll, ein bis mehrmals intern Resolve aufgerufen wird und dieser Aufruf die Auflistung mit den Registrierungen geändert hat (Registrierung hinzugefügt).

Die Lösung war, die Enumeration am Anfang von ResolveAll per .ToList() zu kopieren, sodass die sich nicht in die Quere kommen, d.h. es egal ist, wenn die Original Enumeration geändert wird.


Gruss Peter
19.08.2010 02:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Uwe81 Uwe81 ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.07.2008
Beiträge: 281
Entwicklungsumgebung: Visual Studio 2010/13
Herkunft: Ludwigshafen

Themenstarter Thema begonnen von Uwe81

Uwe81 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Peter!
Vielen Dank für deine Nachtschicht! Werde gleich ein SVN-Update machen.

Viele Grüße,
Uwe
19.08.2010 06:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
Antwort erstellen


© Copyright 2003-2018 myCSharp.de-Team. Alle Rechte vorbehalten. 16.07.2018 16:30