Laden...

Event sender Instanz per Reflection ermitteln, ohne dass der EventHandler gerade aufgerufen ist

Erstellt von ltrader vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.841 Views
L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 11 Jahren
Event sender Instanz per Reflection ermitteln, ohne dass der EventHandler gerade aufgerufen ist

Hallo,

gibt es eine Möglichkeit zur Laufzeit z.B. mit Hilfe von Reflection die sender Instanz eines bestimmten Event Handlers herauszufinden?
Ich meine damit nicht während der Ausführung des Handlers, wo man ja ohnehin Zugriff hat.

Um die Handler Methode ggf. "künstlich" - also nicht durch den Event - auszuführen und dies entsprechend mit sinnvollen Parametern zu tun müsste ich zu diesem Zeitpunkt an der Stelle wo ich den Aufruf tätige über die entsprechende Information verfügen.

Also soetwas wie: Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..

Kennt ihr hier Wege?

Viele Grüße
P.

Real programers do not comment their code.
It is hard to write and it should be hard to understand!

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo ltrader,

da ein Event mittels einer OnXXX-Methode gefeuert werden sollte, kannst du diese Methode auch direkt aufrufen.

Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..

Es kann auch mehrere mögliche Instanzen geben, nimm nur ein GridView als Beispiel in der in jeder Zeile ein Button ist, somit scheidet dieser Weg aus. Dieser wäre ohnehin nicht gut.

Siehe auch [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse)

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo gfoidl,

da ein Event mittels einer OnXXX-Methode gefeuert werden sollte, kannst du diese Methode auch direkt aufrufen.

kommt darauf an, an welcher Stelle der Aufruf erfolgen soll. Da die OnXxx-Methoden nach der Empfehlung protected sein sollen, kommt hier nur die Klasse selbst oder eine Unterklasse davon in Frage.

Hallo ltrader,

Merke dir die Sender Instanz eines Events zum Zeitpunkt der Event Registrierung oder so..

die sender-Instanz steckt als Delegate.Target in dem Delegaten, der für die Registierung benutzt wird, kann also auch später aus dem Feld, das durch public event EventHandler MyEvent (mit)deklariert wird, ausgelesen werden, per Reflection auch von außerhalb der Klasse, ABER das ist in meinen Augen großer Mist.

EventHandler sollte man nie direkt (und auch nicht "künstlich") aufrufen. Wenn man eine bestimmte Funktionalität sowohl im EventHandler als auch an anderer Stelle benötigt, sollte man sie in eine separate Methode mit passenden Parametern auslagern und diese sowohl im EventHandler als auch an anderer Stelle aufrufen.

herbivore

L
ltrader Themenstarter:in
60 Beiträge seit 2008
vor 11 Jahren

Hallo,
das mit dem Delegate.Target ist ein guter Wink, das hatte ich noch nicht probiert.

[..] per Reflection auch von außerhalb der Klasse, ABER das ist in meinen Augen großer Mist.

Grundsätzlich ist das klar und ich habe auch nicht vor das im "normalen" Anwendungsfluss zu implementieren. Ich denke da vielmehr an einen Ansatz, der es mir ermöglicht mit deklarativen Elementen am Code der Anwendung Informationen zu loggen, der es erlaubt den Anwendungsfluss später automatisiert wieder auszuführen. Wichtig ist mir die in der Literatur oft als "Crosscuting concerns" von der eigentlichen Anwendungslogik zu trennen.

Um das zu erreichen bin ich auf der Suche nach geeigneten Werkzeugen

Grüße
ltader

Real programers do not comment their code.
It is hard to write and it should be hard to understand!

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo ltrader,

hast du in diesem Zusammenhang auch schon aspektorientierte Programmierung (AOP) probiert?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"