def register(self, resource_class, content_type, configuration=None):
        """
        Registers a representer factory for the given combination of resource
        class and content type.

        :param configuration: representer configuration. A default instance
          will be created if this is not given.
        :type configuration:
            :class:`everest.representers.config.RepresenterConfiguration`
        """
        if not issubclass(resource_class, Resource):
            raise ValueError('Representers can only be registered for '
                             'resource classes (got: %s).' % resource_class)
        if not content_type in self.__rpr_classes:
            raise ValueError('No representer class has been registered for '
                             'content type "%s".' % content_type)
        # Register a factory resource -> representer for the given combination
        # of resource class and content type.
        rpr_cls = self.__rpr_classes[content_type]
        self.__rpr_factories[(resource_class, content_type)] = \
                                            rpr_cls.create_from_resource_class
        if issubclass(rpr_cls, MappingResourceRepresenter):
            # Create or update an attribute mapping.
            mp_reg = self.__mp_regs[content_type]
            mp = mp_reg.find_mapping(resource_class)
            if mp is None:
                # No mapping was registered yet for this resource class or any
                # of its base classes; create a new one on the fly.
                new_mp = mp_reg.create_mapping(resource_class, configuration)
            elif not configuration is None:
                if resource_class is mp.mapped_class:
                    # We have additional configuration for an existing mapping.
                    mp.configuration.update(configuration)
                    new_mp = mp
                else:
                    # We have a derived class with additional configuration.
                    new_mp = mp_reg.create_mapping(
                                            resource_class,
                                            configuration=mp.configuration)
                    new_mp.configuration.update(configuration)
            elif not resource_class is mp.mapped_class:
                # We have a derived class without additional configuration.
                new_mp = mp_reg.create_mapping(resource_class,
                                               configuration=mp.configuration)
            else:
                # We found a dynamically created mapping for the right class
                # without additional configuration; do not create a new one.
                new_mp = None
            if not new_mp is None:
                # Store the new (or updated) mapping.
                mp_reg.set_mapping(new_mp)
Registers a representer factory for the given combination of resource
        class and content type.

        :param configuration: representer configuration. A default instance
          will be created if this is not given.
        :type configuration:
            :class:`everest.representers.config.RepresenterConfiguration`