Fluxo de resolução
Resolução de classes (Get<T>)
- Define a chave:
ATagouT.ClassName. - Verifica se a classe foi registrada.
- Empilha a chave para detectar dependência circular.
- Se for lazy e ainda não existe instância, cria o
TServiceDatae guarda. - Se necessário, tenta auto-resolver parâmetros do
Create(...)via RTTI. - Instancia via
TServiceData.GetInstance<T>(...).
Observação: Get<T> retorna nil se não encontrar (não lança exceção).
Resolução de interfaces (GetInterface<I>)
- Define a chave: GUID da interface (ou
ATag). - Verifica se a interface foi registrada.
- Empilha a chave para detectar dependência circular.
- Se ainda não existe instância, cria
TServiceDatapara interface. - Se necessário, tenta auto-resolver parâmetros do
Create(...). - Retorna
Iou lançaEServiceNotFoundse não encontrar.
Class resolution (Get<T>)
- Compute key:
ATagorT.ClassName. - Check if registered.
- Push key to detect circular dependencies.
- If lazy and no instance exists, create/store
TServiceData. - If needed, auto-resolve
Create(...)params via RTTI. - Instantiate via
TServiceData.GetInstance<T>(...).
Note: Get<T> returns nil when missing (no exception).
Interface resolution (GetInterface<I>)
- Compute key: interface GUID (or
ATag). - Check if registered.
- Push key for circular detection.
- If no instance exists, create
TServiceDatafor interface. - If needed, auto-resolve
Create(...)params. - Return
Ior throwEServiceNotFoundwhen missing.