Я очень новичок в рамках Spring4D и прошу помощи.Как получить экземпляр дочернего интерфейса из ServiceLocator в Spring4d?
У меня есть следующие классы и интерфейсы:
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');
тогда я пытаюсь создать объект с помощью ServiceLocator:
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;
тогда все в порядке.
Точка: я должен использовать его TContainer в этом случае как репозиторий для TCommand и унаследованных классов. Поэтому я должен сначала использовать ServiceLocator.
Что делать, чтобы избежать исключения и использовать ICommand, но не IVecadCommand в TContainer?
Спасибо. С удовольствием предоставит вам дополнительную информацию.
Да, я нашел то же самое решение. Большое спасибо. – mad