Conceitos
Registro (registry)
O container mantém dois repositórios principais:
- Classes: chave =
T.ClassName(ou um tag, em casos específicos); valor =TClass. - Interfaces: chave =
GUIDToString(TypeInfo(I).Guid)(ou tag); valor = par (TClass,TGUID).
Ciclo de vida
- Singleton (
Singleton<T>): cria e reaproveita uma instância. - Singleton Lazy (
SingletonLazy<T>): registra, mas só instancia no primeiroGet<T>. - Factory (
Factory<T>): instância nova a cadaGet<T>.
Auto-inject (construtor)
Quando o serviço é instanciado e não há parâmetros customizados, o container tenta resolver o construtor Create(...) via RTTI:
- Parâmetros
class: resolve usandoGet<TObject>(NomeDoTipo). - Parâmetros
interface: resolve usandoGetInterface<IInterface>(GUID).
Na prática, isso exige que você registre previamente as dependências que aparecem no construtor.
Eventos (hooks)
No registro, você pode passar callbacks para:
OnCreate: executa após instanciar.OnDestroy: executa quando o serviço é removido.OnConstructorParams: fornece parâmetros customizados para oCreate(...).
Registry
The container keeps two main registries:
- Classes: key =
T.ClassName(or a tag in specific cases); value =TClass. - Interfaces: key =
GUIDToString(TypeInfo(I).Guid)(or tag); value = (TClass,TGUID).
Lifetimes
- Singleton (
Singleton<T>): creates and reuses one instance. - Lazy singleton (
SingletonLazy<T>): registers, instantiates on firstGet<T>. - Factory (
Factory<T>): new instance perGet<T>.
Auto-inject (constructor)
When creating a service and no custom params are provided, it tries to resolve the Create(...) constructor via RTTI:
classparams: resolves viaGet<TObject>(TypeName).interfaceparams: resolves viaGetInterface<IInterface>(GUID).
In practice, you must register the dependencies used by the constructor upfront.
Hooks
On registration, you can provide callbacks for:
OnCreate: runs after instantiation.OnDestroy: runs when removed.OnConstructorParams: supplies customCreate(...)params.