2016-07-04 9 views
0

Ich bin derzeit versucht, eine Klasse zu implementieren, dieTypebuilder verwendet dynamisch eine neue Klasse zu erstellen, die von einer Klasse abgeleitet wird, die sich von DbContext indirekt (IOW die dynamische Klasse abgeleitet erbt von DbContext).GetMethod bekommen Dispose (bool disposing) dynamisch

außer Kraft zu setzen (mit DefineMethod + DefineMethodOverride) der Entsorgen Klasse ich brauche, um es abzurufen erste GetMethod verwenden. Ich konnte die SaveChanges() Methode abrufen, indem Sie die folgenden:

typeof(TBaseDbContext).GetMethod("SaveChanges") 

jedoch die Dispose (bool disposing) ganz anders ist, dass es geschützt ist und Argumente.

Eingrenzen auf das Problem nach unten ich auf den folgenden Code kam:

 MethodInfo disposeOfBase = 
      typeof(DbContext).GetMethod("Dispose", 
       BindingFlags.NonPublic, 
       null, 
       CallingConventions.Any, 
       new Type[] { typeof(bool) }, 
       null); 

Das Ergebnis in disposeOfBase null ist. Ich habe verschiedene Kombinationen ausprobiert, aber ich denke, dass das oben genannte in der Nähe sein sollte. Ich habe keine Ahnung, warum die Dispose nicht gefunden wird.

Was mache ich hier falsch? Wie kann ich den Code ändern, so dass disposeOfBase die Informationen der geschützten Dispose Methode von DbContext enthält?

+3

Versuchen Sie 'BindingFlags.NonPublic | BindingFlags.Instance'. Sie müssen entweder Instance oder Static angeben, um eine Methode zurückzuerhalten. – Tomer

Antwort