anchor.diff:    Result := FStaticInstance;
   end;
   
  +function TDefaultsMap.GetValue(DefValAttribClass : TDefaultValueAttributeClass) : TValue;
  +begin
  +  Result := FInternalMap.Items[DefValAttribClass];
  +end;
  +
  +function TDefaultsMap.HasValue(DefValAttribClass : TDefaultValueAttributeClass) : Boolean;
  +begin
  +  Result := FInternalMap.ContainsKey(DefValAttribClass);
  +end;
  +
   { TDefaultValueAttribute }
   
  -constructor TDefaultValueAttribute.Create(AValue : TValue);
  +constructor TDefaultValueAttribute.Create(AValueType : TDefaultValueKind);
   begin
     inherited Create;
   
  -  FValue := AValue;
  -  FValueKind := dvkData;
  -end;
  -
  -constructor TDefaultValueAttribute.Create;
  -begin
  -  inherited Create;
  -
  -  FValue := TValue.Empty;
  -  FValueKind := dvkCalculated;
  -end;
  -
  -function TDefaultValueAttribute.CalculateValue : TValue;
  -begin
  -  with TDefaultsMap.StaticInstance do
  -    if ContainsKey(Self.GetClassType) then
  -      Result := Items[Self.GetClassType]
  -    else
  -      Result := TValue.Empty;
  +  FValueType := AValueType;
   end;
   
   function TDefaultValueAttribute.GetClassType : TDefaultValueAttributeClass;
  
positive.code: interface
  
  uses
    System.Rtti,
    FIToolkit.Config.Types;
  
  type
  
    TDefaultValueAttributeClass = class of TDefaultValueAttribute;
  
    TDefaultValueAttribute = class abstract (TCustomAttribute)
      strict private
        FValue : TValue;
        FValueKind : TDefaultValueKind;
      private
        function GetClassType : TDefaultValueAttributeClass;
        function GetValue : TValue;
      protected
        function CalculateValue : TValue; virtual;
      public
        constructor Create(AValue : TValue); overload;
        constructor Create; overload;
  
        property Value : TValue read GetValue;
        property ValueKind : TDefaultValueKind read FValueKind;
    end;
  
    DefaultValue = class (TDefaultValueAttribute);
  
    procedure RegisterDefaultValue(DefValAttribClass : TDefaultValueAttributeClass; Value : TValue);
  
  implementation
  
  uses
    System.SysUtils, System.Generics.Collections;
  
  type
  
    TDefaultsMap = class (TDictionary<TDefaultValueAttributeClass, TValue>)
      strict private
        class var FStaticInstance : TDefaultsMap;
      private
        class procedure FreeStaticInstance; static;
        class function  GetStaticInstance : TDefaultsMap; static;
      public
        class property StaticInstance : TDefaultsMap read GetStaticInstance;
    end;
  
  { Utils }
  
  procedure RegisterDefaultValue(DefValAttribClass : TDefaultValueAttributeClass; Value : TValue);
  begin
    TDefaultsMap.StaticInstance.Add(DefValAttribClass, Value);
  end;
  
  { TDefaultsMap }
  
  class procedure TDefaultsMap.FreeStaticInstance;
  begin
  
negative.code:   Pointer(Result) := PPointer(Self)^;
  end;
  
  { TDefaultValueAttribute<T> }
  
  constructor TDefaultValueAttribute<T>.Create(const AValue : T);
  begin
    inherited Create(dvkData);
  
    FValue := AValue;
  end;
  
  constructor TDefaultValueAttribute<T>.Create;
  begin
    inherited Create(dvkCalculated);
  end;
  
  function TDefaultValueAttribute<T>.CalculateValue : T;
    var
      V : TValue;
  begin
    with TDefaultsMap.StaticInstance do
      if HasValue(Self.GetClassType) then
        V := GetValue(Self.GetClassType)
      else
        V := TValue.Empty;
  
    Result := V.AsType<T>;
  end;
  
  function TDefaultValueAttribute<T>.GetValue : T;
  begin
    Result := Default(T);
  
    case ValueKind of
      dvkData:
  