Laden...

[erledigt] Event subscription via Reflection

Erstellt von Diräkt vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.612 Views
D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 11 Jahren
[erledigt] Event subscription via Reflection

Hallo Leute

Mein Ziel ist es mich für ein Event zu registrieren via reflection:

Aufruf:

SubscribeControlEvent("ViewChanged", "FireViewChanged");

Event Subscription per Reflection


 public void SubscribeControlEvent(string eventName, string eventHandlerMethodName)
        {
            var eventInfo = c.GetType().GetEvent(eventName);
            var methodInfo = c.GetType().GetMethod(eventHandlerMethodName);
            Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, c, methodInfo); //<=== hier kracht es || c = UserControl Instanz (WebControl)
            eventInfo.AddEventHandler(c, handler);

        }

Definition (ViewChanged das Event (eventInfo) ; FireViewChanged die Methode (methodInfo))


public event EventHandler<EventArgs<KeyValuePair<int, string>>> ViewChanged;

 public void FireViewChanged()
        {
            if (ViewChanged != null)
            {
                var args = ViewChanged.CreateArgs(new KeyValuePair<int, string>(int.Parse(comboViews.SelectedValue), comboViews.SelectedItem.Text));
                ViewChanged(this, args);
            }
        }

Leider krieg ich immer folgende Exception :

Fehlermeldung:
ArgumentException:
{"Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type."}

Kann mir jemand ein Tipp geben ? 😉

Beste Grüsse

Diräkt

Edit : Typo

D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 11 Jahren

.. Es ist schon recht spät ... daher habe ich wohl etwas durcheinander gebracht :

Es müsste richtigerweise heissen:

SubscribeControlEvent("EventName", "EventHandlerMethod");


public event EventHandler<EventArgs<KeyValuePair<int, string>>> EventName;

public void EventHandlerMethod(object sender, EventArgs<KeyValuePair<int, string>> e)
        {
            
        }


Somit macht auch die Fehlermeldung absolut Sinn.

Ich geh besser schlafen, ggf. könnte es ja mal jemandem nützlich sein 😉

Beste Grüsse

Diräkt