anchor.diff:    else if SameText(LSubject, 'URL') then
       Result := ReadPropertyValue(ActivationRecord.URL, LIdentifier)
     else if SameText(LSubject, 'URLPrototype') then
  -    Result := ReadPropertyValue(ActivationRecord.URLPrototype, LIdentifier);
  -
  -
  -  { TODO -oAndrea : Custom }
  +    Result := ReadPropertyValue(ActivationRecord.URLPrototype, LIdentifier)
  +  else // last chance, custom injection
  +    for LCustomProvider in FContextValueProviders do
  +      LCustomProvider(ActivationRecord, AName, ADesiredType, Result);
   end;
   
   procedure TMARSFireDAC.InjectParamAndMacroValues(const ACommand: TFDCustomCommand);
  
positive.code: 
    LIndex: Integer;
    LValue: string;
  begin
    Result := TValue.Empty;
    LNameTokens := AName.Split([PARAM_AND_MACRO_DELIMITER]);
  
negative.code:     property SQLStatement: string read FSQLStatement;
    end;
  
    TContextValueProviderProc = reference to procedure (const AContext: TMARSActivationRecord;
      const AName: string; const ADesiredType: TFieldType; out AValue: TValue);
  
    TMARSFireDAC = class
    private
      FConnectionDefName: string;
      FConnection: TFDConnection;
      FActivationRecord: TMARSActivationRecord;
    protected
      procedure SetConnectionDefName(const Value: string); virtual;
      function GetConnection: TFDConnection; virtual;
      procedure InjectParamAndMacroValues(const ACommand: TFDCustomCommand); virtual;
      function GetContextValue(const AName: string; const ADesiredType: TFieldType = ftUnknown): TValue; virtual;
      class var FContextValueProviders: TArray<TContextValueProviderProc>;
    public
      const PARAM_AND_MACRO_DELIMITER = '_';
  
  