anchor.diff:  begin
     Result :=
       function (AType: TRttiType; const AAttributes: TAttributeArray; AMediaType: string): Integer
  -    begin
  -      if Assigned(AType) and AType.IsObjectOfType<T>(False) then
  +    var
  +      LType: TRttiType;
  +    begin
  +      Result := 0;
  +      if not Assigned(AType) then
  +        Exit;
  +
  +      LType := TRttiContext.Create.GetType(TypeInfo(T));
  +      if (AType = LType) then
           Result := 100
  -      else if Assigned(AType) and AType.IsObjectOfType<T> then
  -        Result := 99
  -      else
  -        Result := 0;
  +      else if AType.IsObjectOfType<T>(False) then
  +        Result := 95
  +      else if AType.IsObjectOfType<T> then
  +        Result := 90;
       end
   end;
   
  
positive.code:   RegisterReader(
      AReaderClass
      , function (AType: TRttiType; const AAttributes: TAttributeArray; AMediaType: string): Boolean
        begin
          Result := Assigned(AType) and AType.IsObjectOfType<T>;
        end
      , Self.GetDefaultClassAffinityFunc<T>()
    );
  
negative.code:     procedure Enumerate(const AProc: TProc<TReaderEntryInfo>);
  
      class property Instance: TMARSMessageBodyReaderRegistry read GetInstance;
      class function GetDefaultClassAffinityFunc<T>: TGetAffinityFunction;
      class destructor ClassDestructor;
  
      const AFFINITY_HIGH = 30;
  