code: protected <T extends IService, Q extends T> void defineService(Class<? extends T> service, Q defaultImplementation)
    {
      if( !_definingServices )
      {
        throw new IllegalStateException( "Service definition must be done only in the defineServices() method." );
      }
      if( !service.isInterface() )
      {
        throw new IllegalArgumentException( "Services may only be defined as interfaces, and " +
                                            service.getName() +
                                            " is not an interface" );
      }
      IService existingServiceImpl = _services.get( service );
      if( existingServiceImpl != null )
      {
        throw new IllegalStateException( "Service " + service.getName() + " has already been " +
                                         "defined with the " + existingServiceImpl.getClass().getName() +
                                         " default implementation");
      }
      _services.put( service, defaultImplementation );
    }
docs: Defines a service provided by this ServiceKernel
  
  @param service - the service to provide
  @param defaultImplementation - the default implementation of this service