Delphi Spring DI: Czy możliwe jest delegowanie instancji interfejsu bez typu implementacji?
Właśnie zaczynam pracę z Delphi Spring Framework i zastanawiałem się, czy obecna wersja kontenera DI w jakiś sposób pozwala na delegowanie konstrukcji do metody fabrycznej bez określania typu implementacji?
Na przykład. coś podobnego do tego:
GlobalContainer
.RegisterFactory<ISomeObject>(
function: ISomeObject
begin
Result := CreateComObject(CLASS_SomeObject) as ISomeObject;
end)
.Implements<ISomeObject> // could probably be implied from the above
.AsSingletonPerThread;
Jak widać, moim konkretnym przypadkiem użycia jest instancja obiektów COM. W takim przypadku klasa implementująca interfejs, który mnie interesuje, nie jest częścią mojej aplikacji, ale nadal mogę tworzyć instancje, dzwoniącCreateComObject
/ CoCreateInstance
. Jednak wydaje mi się, że nie mam szczęścia, ponieważ rejestracje w kontenerze zawsze wydają się być związane z rzeczywistą klasą wykonawczą.
Zakładając, że w tej chwili nie jest to możliwe, w jaki sposób eksperci mogliby to rozwiązać? Czy utworzysz klasę wrappera lub fikcyjną klasę, czy też po prostu utrzymasz obiekty COM z kontenera DI i po prostu utworzymy je za pomocąCreateComObject
?