Ho appena iniziato con il Delphi Spring Framework e mi chiedevo se la versione attuale del contenitore DI consentiva in qualche modo di delegare la costruzione a un metodo factory senza specificare un tipo di implementazione?Delphi Spring DI: è possibile delegare l'istanza di interfaccia senza un tipo di implementazione?
E.g. qualcosa di simile a questo:
GlobalContainer
.RegisterFactory<ISomeObject>(
function: ISomeObject
begin
Result := CreateComObject(CLASS_SomeObject) as ISomeObject;
end)
.Implements<ISomeObject> // could probably be implied from the above
.AsSingletonPerThread;
Come si può vedere, il mio caso d'uso specifico è l'istanziazione di oggetti COM. In tal caso, la classe che implementa l'interfaccia a cui sono interessato non fa parte della mia applicazione, ma sono ancora in grado di creare istanze chiamando lo CreateComObject
/CoCreateInstance
. Tuttavia, sembra che io sia sfortunato in quanto le iscrizioni nel Container sembrano sempre legate a una classe di implementazione effettiva.
Supponendo che al momento non sia possibile, come fareste gli esperti a risolvere questo problema? Creeresti una classe wrapper o una classe fittizia o semplicemente tieni gli oggetti COM fuori dal contenitore DI e li istanzia semplicemente tramite CreateComObject
?
Grazie per l'aggiornamento! È geniale! :) –