//	public static Dictionary<Type, List<CustomListener>> registeredListeners = new Dictionary<Type, List<CustomListener>> ();

//	public static List<CustomListener> registeredListeners = new List<CustomListener> ();

//	public static void subscribe<E> (this CustomListener listener) where E : CustomEvent {
//		Type eventType = typeof (E);
//		if (!registeredListeners.ContainsKey (eventType))
//			registeredListeners.Add (eventType, new List<CustomListener> ());
//		registeredListeners [eventType].Add (listener);
//	}

//	public static void registerHandler<E> (this CustomListener listener, CustomEventMethod<E> handler) where E : CustomEvent {
//		Type eventType = typeof (E);
//		if (!registeredHandlers.ContainsKey (eventType))
//			registeredHandlers.Add (eventType, new CustomEventMethod<CustomEvent> ());
//		registeredHandlers [eventType].Add (
//			new KeyValuePair<CustomListener, CustomEventMethod<CustomEvent>> (listener, handler as CustomEventMethod<CustomEvent>));
//	}
    public static void registerHandler <E> (this CustomListener listener, CustomEventMethod <E> handler) where E : CustomEvent
    {
        Type listenerType = listener.GetType();
        Type eventType    = typeof(E);

        Debug.Log("Registering " + handler.Target + "." + handler.Method.Name + " for " + eventType);
        if (!handlerList.ContainsKey(eventType))
        {
            handlerList.Add(eventType, new Dictionary <Type, MethodInfo> ());
        }
        if (handlerList [eventType].ContainsKey(listenerType))
        {
            return;
        }
        handlerList [eventType].Add(listenerType, handler.Method);
        listener.register <E> ();

//		registeredHandlers [eventType].Add (new KeyValuePair<CustomListener, MethodInfo> (listener, handler.Method));
    }