anchor.diff:  end;
   {$ENDREGION}
   
  -{$REGION TCELogMessageSubject --------------------------------------------------}
  -function TCELogMessageSubject.acceptObserver(aObject: TObject): boolean;
  -begin
  -  exit(aObject is ICELogMessageObserver);
  -end;
  -
  -procedure subjLmFromString(aSubject: TCELogMessageSubject; const aValue: string;
  -  aData: Pointer; aCtxt: TCEAppMessageCtxt; aKind: TCEAppMessageKind);
  -var
  -  i: Integer;
  -begin
  -  with aSubject do for i:= 0 to fObservers.Count-1 do
  -    (fObservers.Items[i] as ICELogMessageObserver).lmFromString(aValue, aData, aCtxt, aKind);
  -end;
  -
  -procedure subjLmClearByContext(aSubject: TCELogMessageSubject; aCtxt: TCEAppMessageCtxt);
  -var
  -  i: Integer;
  -begin
  -  with aSubject do for i:= 0 to fObservers.Count-1 do
  -    (fObservers.Items[i] as ICELogMessageObserver).lmClearByContext(aCtxt);
  -end;
  -
  -
  -procedure subjLmClearByData(aSubject: TCELogMessageSubject; aData: Pointer);
  -var
  -  i: Integer;
  -begin
  -  with aSubject do for i:= 0 to fObservers.Count-1 do
  -    (fObservers.Items[i] as ICELogMessageObserver).lmClearByData(aData);
  -end;
  -
  -
  -{$ENDREGION}
  +
  +function getMessageDisplay(var obj: ICEMessagesDisplay): ICEMessagesDisplay;
  +begin
  +  if obj = nil then
  +    obj := EntitiesConnector.getSingleService('ICEMessagesDisplay') as ICEMessagesDisplay;
  +  exit(obj);
  +end;
  +
  +function getMessageDisplay: ICEMessagesDisplay;
  +begin
  +  exit(EntitiesConnector.getSingleService('ICEMessagesDisplay') as ICEMessagesDisplay);
  +end;
  +
  +function getprocInputHandler(var obj: ICEProcInputHandler): ICEProcInputHandler;
  +begin
  +  if obj = nil then
  +    obj := EntitiesConnector.getSingleService('ICEProcInputHandler') as ICEProcInputHandler;
  +  exit(obj);
  +end;
  +
  +function getprocInputHandler: ICEProcInputHandler;
  +begin
  +  exit(EntitiesConnector.getSingleService('ICEProcInputHandler') as ICEProcInputHandler);
  +end;
  +
   end.
  
positive.code: interface
  
  uses
    Classes, SysUtils, actnList, menus,
    ce_synmemo, ce_project, ce_observer;
  
  type
  
    (**
     * An implementer can save and load some stuffs on application start/quit
     *)
    ICESessionOptionsObserver = interface
    ['ICEWidgetPersist']
      // persistent things are about to be saved.
      procedure sesoptBeforeSave;
      // persistent things can be declared to aFiler.
  
negative.code:   procedure subjSesOptsDeclareProperties(aSubject: TCESessionOptionsSubject; aFiler: TFiler);{$IFDEF RELEASE}inline;{$ENDIF}
    procedure subjSesOptsAfterLoad(aSubject: TCESessionOptionsSubject);                        {$IFDEF RELEASE}inline;{$ENDIF}
  
  
  {
    Services assignements:
  
    lazily get the interface of a service when needed or for a ponctual usage
  }
  
    function getMessageDisplay(var obj: ICEMessagesDisplay): ICEMessagesDisplay; overload;
    function getMessageDisplay: ICEMessagesDisplay;overload;
    function getprocInputHandler(var obj: ICEProcInputHandler): ICEProcInputHandler;overload;
    function getprocInputHandler: ICEProcInputHandler;overload;
  
  implementation
  
  