anchor.diff:    Classes, SysUtils, Contnrs;
   
   type
  +
  +  (**
  +   * interface for a single Coedit service (many to one relation).
  +   * A service is valid during the whole application life-time and
  +   * is mostly designed to avoid messy uses clauses or to limit
  +   * the visibility of the implementer methods.
  +   *)
  +  ICESingleService = interface
  +    function singleServiceName: string;
  +  end;
   
     (**
      * Manages the connections between the observers and their subjects in the whole program.
  
positive.code: begin
    fObservers  := TObjectList.create(false);
    fSubjects   := TObjectList.create(false);
  end;
  
  destructor TCEEntitiesConnector.destroy;
  
negative.code:     procedure addSubject(aSubject: TObject);
      procedure removeObserver(anObserver: TObject);
      procedure removeSubject(aSubject: TObject);
      // allow to register a single service provider.
      procedure addSingleService(aServiceProvider: TObject);
      // allow to retrieve a single service provider based on its interface name
      function getSingleService(const aName: string): TObject;
      // should be tested before forceUpdate()
      property isUpdating: boolean read getIsUpdating;
    end;
  
  
  
    (**
     * Interface for a Coedit subject. Basically designed to hold a list of observer
     *)
    ICESubject = interface
      // an observer is proposed. anObserver is not necessarly compatible.
      procedure addObserver(anObserver: TObject);
      // anObserver must be removed.
  