public static HandleEntry Get(Type type) { HandleEntry entry = null; if (!s_Dic.TryGetValue(type, out entry)) { s_Dic[type] = entry = new HandleEntry(type); } return(entry); }
/// <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); }