我在Spring4D框架中很新,並請求幫助。如何在Spring4d中從ServiceLocator獲取子接口實例?
我旁邊的類和接口:
ICommand = interface
TCommand = class(TInterfacedObject, ICommand)
IVecadCommand = interface(ICommand)
TVecadCommand = class(TCommand, IVecadCommand)
TVecadCommandJPG = class(TVecadCommand, IVecadCommand)
TCommandDeckelJPG = class(TVecadCommandJPG, IVecadCommand)
然後我註冊一個組件:
GlobalContainer.RegisterComponent<TCommandDeckelJPG>.Implements<IVecadCommand>('deckel_jpg');
然後我嘗試與服務定位器的幫助下創建一個對象:
var
i: Integer;
com: ICommand;
begin
Result := nil;
com := ServiceLocator.GetService<ICommand>(actionName);
com.setSession(designSession);
Result := com;
end;
作爲執行的結果,我有一個例外:
Invalid class typecast
爲了避免例外,我賺那麼:
var
i: Integer;
com: IVecadCommand;
begin
Result := nil;
com := ServiceLocator.GetService<IVecadCommand>(actionName);
com.setSession(designSession);
Result := com;
end;
那麼一切都OK。
一點是我一直用它TContainer在這種情況下,存儲庫TCommand和繼承類。所以我必須首先使用ServiceLocator。
我應該怎麼做,以避免異常和使用的ICommand但TContainer不IVecadCommand?
謝謝。將提供額外的細節與樂趣。
是的,我找到了相同的解決方案。非常感謝。 – mad