Generics & Reflection - GenericArguments [0] verletzt die Einschränkung des Typs

8

Ich habe mir eine Zeitlang die Haare ausgezogen, im Wesentlichen versuche ich eine generische Repository-Factory zu implementieren, die wie folgt aufgerufen wird:

%Vor%

Die Repository-Factory sieht folgendermaßen aus:

%Vor%

Wenn ich versuche, die GetRespository-Funktion aufzurufen, schlägt die folgende Zeile fehl

%Vor%

Der Fehler, den ich bekomme, ist:

  

ArgumentException - GenericArguments [0], 'Framework.Repositories.IRepository'1 [Apps.Documents.Entities.PerpetualDocument]', 'Framework.Repositories.DocumentLibraryRepository'1 [T]' verstößt gegen die Einschränkung des Typs 'T' .

Irgendwelche Ideen, was hier falsch läuft?

BEARBEITEN:

Die Implementierung des Repository ist wie folgt:

%Vor%

Und das IRepository sieht so aus:

%Vor%     
Bevan 14.09.2011, 10:30
quelle

3 Antworten

6

Ihr Code versucht, eine Instanz von DocumentLibraryRepository<IRepository<Document>> anstelle von DocumentLibraryRepository<Document> zu erstellen.

Sie möchten stattdessen diesen Code verwenden:

%Vor%     
Daniel Hilgarth 14.09.2011, 10:39
quelle
0

Dies würde bedeuten, dass Sie möglicherweise eine where Einschränkung für den generischen Typ DocumentLibraryRepository<T> verwendet haben und dass der Typ PerpetualDocument nicht mit dieser Einschränkung übereinstimmt

    
RobV 14.09.2011 10:41
quelle
0

Vielleicht kann meine Antwort jemandem helfen, der denselben Fehler hat. Mein Szenario ist:

%Vor%

Also zur Laufzeit wenn Run () -Methode geladen ist (nicht ausgeführt) bekomme ich eine Ausnahme: GenericArguments [0] .... System.EventHandler'1 [TEventArgs] 'verletzt die Einschränkung des Typparameters' TEventArgs '.. bei der Methode Run ().

Ich weiß nicht, ob es ein .NET-Fehler ist, aber in meinem Fall habe ich dieses Problem gelöst, indem ich den Typ der TypedEvent-Eigenschaft in der Klasse A von typisiert EventHandler<B> in EventHandler änderte. Mein Szenario wird:

%Vor%

Ich hoffe, dass das jemandem helfen kann.

    
Alexei Bondarev 29.05.2017 13:59
quelle