Einstellung der Eigenschaft-Wert mit keine setter verwenden PrivateObject

Mit einem PrivateObject ich bin versucht, erstellen Sie eine Instanz der ItemChange Klasse (gefunden hier). Blick durch den debugger als auch das Objekt-browser in Visual Studio 2008 kann ich nicht scheinen, um herauszufinden alles im Zusammenhang mit der ItemId andere Eigenschaft als ein setter. Unten ist der code, den ich verwende.

var itemChange = new PrivateObject(typeof(ItemChange));

itemChange.SetFieldOrProperty("ChangeType", _fixture.CreateAnonymous<ChangeType>());
itemChange.SetFieldOrProperty("ItemId", _fixture.CreateAnonymous<ItemId>());

Die Fehler ich erhalte, ist:

System.MissingMethodException : Method 'Microsoft.Exchange.WebServices.Data.ItemChange.ItemId' not found.

Habe ich versucht, Variationen des BindingFlags, aber nichts scheint zu helfen. Wie kann ich mir eine Immobilie, die keine setter und nur eine get?

Bearbeiten

Bezüglich meiner Kommentare, die andere inline-Klasse, ich kann eine PrivateObject Objekt-Instanz und legen Sie das ItemId ist die ItemEvent Klasse (gefunden hier). Diese Klasse war einfach, weil wenn ich Debuggen und fügte hinzu, die Klasse zu meiner watch-Liste konnte ich sehen itemId wie eine private variable. Allerdings, die Durchführung der gleichen Schritte auf der ItemChange Klasse I nicht finden alle Spuren einer ItemId anderen Bereich als die Immobilie selbst, dass nur hat einen setter. Dies ist, wo ich bin ratlos, wie um diese Eigenschaft festzulegen.

Schließlich ich don ' T haben Zugang zu einem tool, das mir erlauben würde, zu dekompilieren, die Klasse und sehen, was was ist.

  • Es ist ein wenig kompliziert und es kann fehlschlagen, wenn Sie änderungen an der Implementierung, sondern können Sie mithilfe von Reflektion?
  • Ich dachte PrivateObject wurde ein wrapper um alle, die Reflexion Zeug, nicht?
  • Sie brauchen, um zu versuchen und legen Sie die private variable, wie es ist, die Sie versucht, in der öffentlichkeit eine, die scheitern.
  • Wenn Sie eine Eigenschaft nennen Sie es nicht verstehen können, was die backing-store.
  • Das ist es, was ich meinte, als ich sagte, dass ich nicht finden können, alles, was mit ItemId wenn ich Debuggen. Es gibt auch andere inline-Kurse, die ich erstellen können, die privaten Objekte. Wenn ich Debuggen kann ich sehen, es sind Felder genannt _itemId.
  • Also stimmt dann itemChange.SetFieldOrProperty("_itemId", _fixture.CreateAnonymous<ItemId>()); Arbeit?
  • Leider nicht. Siehe edit.
  • wichtiger Hinweis: beim Graben in den Eingeweiden der a-Klasse, Hör nicht auf, bis Sie auf object.

InformationsquelleAutor Nosila | 2012-04-13
Schreibe einen Kommentar