anchor.diff:      class destructor Destroy;
       class procedure RegisterTypeFactory<F>(const aFactoryMethod: TFactoryMethod<F>);
       class function  Construct<F>: F;
  +    class function  ConstructFromTypeInfo(const aTypeInfo: PTypeInfo): IBase;
     end;
   
   implementation
   
  -uses
  -  TypInfo;
   
   { TypeRegistration }
   
  
positive.code: interface
  
  uses
    Generics.Collections;
  
  type
    TFactoryMethod<T> = function:T;
  
negative.code:   end;
  end;
  
  class function TypeRegistry.ConstructFromTypeInfo(const aTypeInfo: PTypeInfo): IBase;
  var
    Factory      : Pointer;
  begin
    Result := nil;
    if FTypeInfoToFactoryLookup.TryGetValue(aTypeInfo, Factory)
    then Result := IBase(TFactoryMethod<IBase>(Factory)());
  end;
  
  
  
  
  end.
  