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
.. 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