docs: function EventDispatcher (tree, definition) {
    if (!tree || !_.isObject(tree) || !_.isFunction(tree.getViewBuilders)) {
      var err = new Error('Please pass a valid tree!');
      debug(err);
      throw err;
    }
  
    if (!definition || !_.isObject(definition)) {
      var err = new Error('Please pass a valid command definition!');
      debug(err);
      throw err;
    }
  
    this.tree = tree;
  
    this.definition = {
      correlationId: 'correlationId', // optional
      id: 'id',                       // optional
      name: 'name',                   // optional
  //      aggregateId: 'aggregate.id',    // optional
  //      context: 'context.name',        // optional
  //      aggregate: 'aggregate.name',    // optional
      payload: 'payload'              // optional
  //      revision: 'revision'            // optional
  //      version: 'version',             // optional
  //      meta: 'meta'                    // optional, if defined theses values will be copied to the notification (can be used to transport information like userId, etc..)
    };
  
    this.definition = _.defaults(definition, this.definition);
  }