Ich versuche, eine LocalCommand-Instanz neu zu erstellen, die eine private Klasse von System.Data.SqlClient.SqlCommandSet ist. Ich scheine die Typinformationen zu greifen nur gut in der Lage sein:Activator.CreateInstance mit privaten versiegelten Klasse
Assembly sysData = Assembly.Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
localCmdType = sysData.GetType("System.Data.SqlClient.SqlCommandSet+LocalCommand");
aber Activator.CreateInstance wirft eine Ausnahme, wenn ich versuche, es zu instanziieren:
object item = Activator.CreateInstance(localCmdType,
new object[] { commandText, parameters, num7, commandType });
System.MissingMethodException: Constructor auf Typ ‚System .Data.SqlClient.SqlCommandSet + LocalCommand 'nicht gefunden.
Die Konstruktorargumente stimmen mit der Signatur überein, die in Reflector angezeigt wird. Wird eine private Klasse mit einem internen Core neugestartet, der von einer anderen CreateInstance-Überladung unterstützt wird?
Die docs sagen CreateInstance nur öffentliche Konstrukteuren vor 2.0sp1 nennt. Danach gibt es eine Reihe von Berechtigungen, die notwendig sind. –
Guter Aufruf von GetConstructor(), das funktioniert. Ich finde es merkwürdig, wenn man bedenkt, dass der GetConstructor-Aufruf einer der Activator.CreateInstance() - Überladungen sehr ähnlich sieht. –