Ich danke euch für die Anregungen.
Derzeit habe ich es so gelöst wie hoika es vorgeschlagen hat: Die Aurelis
Unit als letztes einbinden. Ich prüfe demnächst noch, ob ich es sich lohnt den Aurelis-Typen durch meinen eigenen zu ersetzen.
Das Problem besteht wirklich darin, dass in der Spring-
Unit alle Basis-Typen von Spring4D deklariert sind.
Z.B.: Ich benutze den Nullable-Spring nicht, möchte aber dennoch den TValue-Helper verwenden. (Konkret die Fähigkeit des Helpers um Werte zu konvertieren.)
Delphi-Quellcode:
uses
Spring;
// <snip>
procedure Foo;
var
x: String
Value: TValue
begin
Value := 20;
x := Value.ToType<String>;
end;
Möchte ich jetzt aber eine Nullable-Konvertierung durchführen, registriere ich zuerst Aurelis-Nullable Konverter:
Delphi-Quellcode:
uses
Spring.ValueConverters,
Aurelius.Nullable;
// <snip>
TValueConverterFactory.RegisterConverter([SaemtlicheTypen], TypeInfo(Aurelius.Nullable<EntsprechenderTyp>), TTypeToNullableConverter); // und natürlich die Gegenrichtung
Besonders schön ist das die Klasse TTypeToNullableConverter nicht von mir, sondern auch aus Spring stammt und augenscheinlich mit dem Aurelius-Nullable klar kommt.
Anschließend kann ich Aurelius.Nullable-Konvertierungen durchführen:
Delphi-Quellcode:
uses
Spring,
Aurelius.Nullable;
// <snip>
procedure Foo;
var
x: Nullable<String>
Value: TValue;
begin
Value := 20;
x := Value.ToType<Nullable<String>>;
end;
Vielleicht hat jemand noch eine andere Idee, anonsten kann ich (und auch zukünftige Entwickler des Projekts) denk ich damit umgehen.
Wer sucht, der findet. Wer länger sucht, findet mehr.