我遇到了一个我不明白的奇怪问题。
我想做的事情非常简单:动态加载程序集,找到具有预定义名称的事件并挂钩到该事件。
执行此操作的代码很简单:
private void AttachToEvent(Type type)
{
if (type == null) return;
foreach (var @event in type.GetEvents())
{
if (@event.Name != EVENTNAME) continue;
var eventHandler = typeof(Handler).GetMethod(DELEGATEMETHOD, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
if (@event == null || eventHandler == null) return;
var @delegate = Delegate.CreateDelegate(@event?.EventHandlerType, eventHandler);
@event.AddEventHandler(type, @delegate);
}
}
Run Code Online (Sandbox Code Playgroud)
定义DELEGATEMETHOD
如下:
public void LogHandler(DateTime dateTime, string connectorName, string severity, string details)
{
// do something with the received log event...
}
Run Code Online (Sandbox Code Playgroud)
在加载的程序集中,事件定义如下:
public delegate void LogHandler(DateTime dateTime, …
Run Code Online (Sandbox Code Playgroud) c# ×1