InjectContainer

1.0.0Open SourceCRA-ready
Sobre o projeto

Framework de Dependency Injection thread-safe e alto desempenho para Delphi. Cache RTTI personalizado com 40-60% de ganho de velocidade na resolução, detecção automática de dependências circulares e ciclos de vida completos: Singleton, Factory, LazyLoad e Interface-based. Projetado para ambientes servidor de alta concorrência.

Linguagem
Delphi
Plataformas
🪟Windows🐧Linux🍎macOS🤖Android📱iOS
README do repositóriorecolher

InjectContainer for Delphi

Delphi XE+ License


🇬🇧 English

InjectContainer is a state-of-the-art, high-performance, and thread-safe Dependency Injection (DI) framework for Delphi. Designed to simplify the development of robust, modular, and enterprise-grade applications, InjectContainer decouples classes and interfaces dynamically with minimal runtime overhead. By leveraging a high-speed optimized RTTI cache, object instantiation pooling, and automatic circular dependency detection, it provides developers with a seamless, clean, and modern codebase architecture.

🚀 Key Features

  • Diverse Lifecycle Management: Register and resolve dependencies as Singletons, Factories, LazyLoads, and Interface-based classes.
  • 100% Thread-Safe: Built from the ground up to be safe for highly concurrent, multi-threaded server environments out of the box.
  • High-Speed RTTI Cache: Custom metadata cache pooling yields up to 40% to 60% faster resolution compared to standard Delphi RTTI.
  • Circular Dependency Detection: Automatic prevention mechanism that detects and reports infinite instantiation loops during resolution.
  • Comprehensive Lifecycle Logging: Built-in hooks to trace, monitor, and audit object lifecycles (creation, resolution, and destruction).
  • Memory Pool Optimizations: Native allocation optimization reduces heap overhead by 20% to 30% for high-frequency factory instantiations.

🏛 Compatibility Matrix

Environment / IDE Platform / Compiler Thread Safety Circular Detection
Delphi XE or superior VCL, FMX, Console (Win/Linux/macOS/iOS/Android) ✅ Yes ✅ Yes

⚙️ Installation

To install using the package manager Boss:

boss install "https://github.com/ModernDelphiWorks/InjectContainer"

[!NOTE] Since this package does not have a static registry on Boss, it must be installed using its direct Git repository HTTPS URL.


⚡️ Quick Start

1. Setup Entry Point

program MyApp;

uses
  InjectContainer.Core;

begin
  // Initialize and build the global dependency container
  InjectContainer.Build;
  
  Application.Initialize;
  Application.Run;
end.

2. Registering Dependencies

uses
  InjectContainer.Core;

// Register a Singleton (a single shared instance)
InjectContainer.RegisterSingleton<IUserService, TUserService>;

// Register a Factory (creates a new instance upon each request)
InjectContainer.RegisterFactory<IEmailService, TEmailService>;

// Register a LazyLoad (instantiated only when first requested)
InjectContainer.RegisterLazy<ILogService, TLogService>;

3. Resolving Dependencies

// Resolve via interface
var LUserService := InjectContainer.GetInterface<IUserService>;

// Resolve via concrete class
var LEmailService := InjectContainer.Get<TEmailService>;

🇧🇷 Português

InjectContainer é um framework moderno, de alta performance e thread-safe para Injeção de Dependências (DI) em Delphi. Projetado para simplificar a criação de aplicações corporativas robustas e modulares, o InjectContainer desacopla classes e interfaces de forma dinâmica com o menor overhead possível. Ao combinar cache RTTI otimizado de alta velocidade, pooling de instanciação de objetos e detecção automática de dependência circular, ele fornece aos desenvolvedores uma arquitetura limpa, legível e de padrão state-of-the-art.

🚀 Recursos Principais

  • Múltiplos Ciclos de Vida: Registre e resolva dependências como Singleton, Factory, LazyLoad ou mapeamento simples baseado em interfaces.
  • Totalmente Thread-Safe: Implementado nativamente para ser seguro para o uso concorrente em ambientes multi-thread de alta carga de forma imediata.
  • Cache RTTI de Alta Velocidade: O cache RTTI personalizado reduz o tempo de busca e carregamento de metadados entre 40% e 60% comparado à RTTI padrão.
  • Detecção de Dependência Circular: Mecanismo automático para prevenir loops infinitos e gerar relatórios claros de dependência cíclica durante a resolução.
  • Log de Ciclo de Vida: Sistema de monitoramento integrado para registrar a criação, resolução e destruição de recursos.
  • Otimização de Alocação de Memória: O pool de memória otimizado reduz a alocação em heap entre 20% e 30% em instanciamentos de Factory muito recorrentes.

🏛 Matriz de Compatibilidade

Ambiente / IDE Plataforma / Compilador Thread Safety Detecção Circular
Delphi XE ou superior VCL, FMX, Console (Win/Linux/macOS/iOS/Android) ✅ Sim ✅ Sim

⚙️ Instalação

Para instalar usando o gerenciador de pacotes Boss:

boss install "https://github.com/ModernDelphiWorks/InjectContainer"

[!NOTE] Como esta biblioteca não está pré-registrada com apelido no indexador global do Boss, ela é instalada informando-se o link HTTPS direto de seu repositório Git.


⚡️ Início Rápido

1. Configurando o Entry Point (Bootstrapping)

program MyApp;

uses
  InjectContainer.Core;

begin
  // Inicializa e constrói o container de injeção global
  InjectContainer.Build;
  
  Application.Initialize;
  Application.Run;
end.

2. Registrando Dependências

uses
  InjectContainer.Core;

// Registra um Singleton (única instância compartilhada por toda a aplicação)
InjectContainer.RegisterSingleton<IUserService, TUserService>;

// Registra uma Factory (uma nova instância criada a cada chamada de resolução)
InjectContainer.RegisterFactory<IEmailService, TEmailService>;

// Registra um LazyLoad (instanciado tardiamente apenas quando solicitado)
InjectContainer.RegisterLazy<ILogService, TLogService>;

3. Resolvendo Dependências

// Resolve através de interface
var LUserService := InjectContainer.GetInterface<IUserService>;

// Resolve através da classe concreta
var LEmailService := InjectContainer.Get<TEmailService>;

Copyright © 2025-2026 Isaque Pinheiro. Licensed under MIT License.