code: func (dis *dispatcher) RegisterListener(listenerObj core.EventListener, keys ...string) error {
  	if listenerObj == nil {
  		err := errors.New("nil listener")
  		openlogging.GetLogger().Error("nil listener supplied:" + err.Error())
  		return errors.New("nil listener")
  	}
  
  	for _, key := range keys {
  		listenerList, ok := dis.listeners[key]
  		if !ok {
  			listenerList = make([]core.EventListener, 0)
  		}
  
  		// for duplicate registration
  		for _, listener := range listenerList {
  			if listener == listenerObj {
  				return nil
  			}
  		}
  
  		// append new listener
  		listenerList = append(listenerList, listenerObj)
  
  		// assign latest listener list
  		dis.listeners[key] = listenerList
  	}
  	return nil
  }
docs: // RegisterListener registers listener for particular configuration