예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
        }