Injeção de Dependência (Binds)
O Nidus usa um container de injeção (baseado no InjectorBr) para resolver dependências dentro do contexto do módulo.
Tipos de bind
Os binds são declarados no método Binds do módulo usando a sintaxe Bind<T> (atalho disponível em Nidus.Module).
Bind<T>.Singleton: cria a instância quando o módulo iniciaBind<T>.SingletonLazy: cria a instância quando for solicitada pela primeira vezBind<T>.Factory: cria sob demandaBind<T>.SingletonInterface<I>: expõe uma interface resolvida viaGetInterface<I>
Exemplo
unit NFe.Module;
interface
uses
Nidus.Module;
type
TNFeModule = class(TModule)
public
function Binds: TBinds; override;
end;
implementation
uses
NFe.Repository,
NFe.Controller,
NFe.Provider;
function TNFeModule.Binds: TBinds;
begin
Result := [
Bind<TRepositoryServer>.SingletonLazy,
Bind<TControllerServer>.Singleton,
Bind<TProviderORMBr>.Factory
];
end;
end.
cuidado
Para que um bind seja elegível a substituição/override, o tipo precisa estar declarado corretamente no Bind<T>.