/// <summary> /// 指定のオブジェクトをイベントを登録します。 /// イベントはHandle属性を利用して設定します。 /// 解除する場合は、返り値のオブジェクトを解放してください。 /// </summary> public EventHandle Bind(object handler) { if (Disposed) { return(new EventHandle()); } Log.Debug("[ilib-event] Bind {0}", handler); EventHandle handle = new EventHandle(); var entry = HandleEntry.Get(handler.GetType()); foreach (var kvp in entry.Methods) { var key = kvp.Key; var method = kvp.Value; var parameter = entry.Parameters[key]; PathBase path = null; var type = parameter?.ParameterType ?? null; path = new HandlePath(this, key, (obj) => entry.Invoke(handler, key, obj), type, handle); handle.Add(path); m_Paths.Add(path); } return(handle); }
internal HandlePath(EventCall call, string key, Func <object, bool> func, Type type, EventHandle handle) : base(call, key) { Type = type; m_Func = func; m_Handle = handle; }