code: public <T extends IService, Q extends T> void redefineService(Class<? extends T> service, Q newProvider)
    {
      if( _definingServices )
      {
        throw new IllegalStateException( "Service definition in progress, so service redefinition is not allowed.  Please " +
                                         "move redefinitions to the redefineServices method." );
      }
      IService existingServiceImpl = _services.get( service );
      if( existingServiceImpl == null )
      {
        throw new IllegalArgumentException( "Service " + service.getName() + " is not defined in this ServiceKernel.");
      }
      if( existingServiceImpl.isInited() )
      {
        throw new IllegalStateException( "Service " + service.getName() + " has already been " +
                                         "initialized with the " + existingServiceImpl.getClass().getName() +
                                         " implementation");
      }
      _services.put( service, newProvider );
    }
docs: Overrides the default implemenation of the service with a different provider.  Note that the current
  provider cannot have been accessed (all services must be consistent during runtime.)
  
  @param service - the service to provide
  @param newProvider - the new provider of this service