Changelog¶
All notable changes to InjectQ will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Added¶
- Auto-registration of concrete types: New
allow_concrete
parameter (default: True) automatically registers concrete types when registering instances to base types - Registration override control: New
allow_override
parameter (default: True) controls whether existing service registrations can be overwritten - Enhanced
bind_instance()
method withallow_concrete
parameter - Enhanced
bind_factory()
method withallow_concrete
parameter - Enhanced
bind()
method withallow_concrete
parameter - New
AlreadyRegisteredError
exception for override conflicts - Comprehensive documentation with MkDocs
- Plugin system for extensibility
- Advanced middleware support
- Enhanced async support with context managers
- Resource management utilities
- Performance profiling tools
- Diagnostic and validation utilities
- Migration guides from other DI libraries
Changed¶
- Breaking: InjectQ constructor now accepts
allow_override
parameter - Breaking: All binding methods now accept
allow_concrete
parameter - Dict-like syntax (
container[Type] = instance
) now usesallow_concrete=True
by default - Improved subclass injection support - both base and concrete types can be resolved
- Improved type safety and mypy compliance
- Enhanced error messages and debugging information
- Optimized performance for large dependency graphs
Fixed¶
- Subclass injection issues where concrete types weren't accessible after registering to base type
- Various bug fixes and stability improvements
[0.1.0] - 2024-01-15¶
Added¶
- Initial release of InjectQ
- Core dependency injection functionality
- Multiple injection patterns:
- Dict-like interface
@inject
decoratorInject()
function- Service scopes:
- Singleton scope
- Transient scope
- Scoped services
- Custom scopes
- Module system for organizing dependencies
- Provider pattern for complex object creation
- Framework integrations:
- FastAPI integration
- Taskiq integration
- FastMCP integration
- Testing utilities:
- Test containers
- Mocking and overrides
- Async testing support
- Advanced features:
- Conditional registration
- Lazy loading
- Circular dependency detection
- Lifecycle hooks
- Thread safety features
- Performance optimizations
- Type safety with full mypy support
Features¶
Core Container¶
InjectQ
container with dict-like interface- Automatic dependency resolution
- Type-safe service registration and retrieval
- Support for generic types and protocols
Scoping System¶
- Built-in scopes: singleton, transient, scoped
- Custom scope creation and management
- Scope-aware dependency resolution
- Automatic resource cleanup
Module System¶
- Modular dependency organization
- Provider pattern for complex construction
- Module composition and inheritance
- Configuration-based modules
Injection Patterns¶
@inject
decorator for automatic injectionInject()
function for explicit injection- Dict-like container access
- Support for optional dependencies
Framework Integrations¶
- FastAPI:
Injected[T]
dependency provider - Taskiq: Automatic worker dependency injection
- FastMCP: Server and tool integration
Testing Support¶
- Test-specific containers
- Service mocking and overrides
- Async testing utilities
- Integration testing helpers
Advanced Features¶
- Conditional service registration
- Lazy loading of expensive services
- Circular dependency detection and resolution
- Service lifecycle hooks
- Resource management with automatic cleanup
Performance Features¶
- Compile-time dependency resolution
- Service caching and optimization
- Thread-safe operations
- Minimal runtime overhead
Documentation¶
- Comprehensive getting started guide
- Detailed core concepts explanation
- Extensive examples and tutorials
- Framework integration guides
- Testing strategies and best practices
- Migration guides from other libraries
- Complete API reference
Development¶
- Full test suite with high coverage
- Type checking with mypy
- Code quality with ruff
- Continuous integration setup
- Documentation generation with MkDocs
[0.0.1] - 2023-12-01¶
Added¶
- Initial project setup
- Basic dependency injection prototype
- Core container implementation
- Simple registration and resolution
Release Notes¶
Version 0.1.0 Release Notes¶
InjectQ 0.1.0 is the first stable release of our modern Python dependency injection library. This release focuses on providing a simple yet powerful API that grows with your application needs.
Key Highlights¶
๐ฏ Multiple API Styles: Choose the injection style that fits your needs:
- Dict-like interface for simple cases
- @inject
decorator for automatic injection
- Inject()
function for explicit control
๐ Type Safety First: Full mypy compliance with early error detection and comprehensive type checking.
โก Performance Optimized: Compile-time dependency resolution with caching for minimal runtime overhead.
๐งช Testing Built-in: Comprehensive testing utilities including test containers, mocking, and async support.
๐ Framework Native: Built-in integrations for FastAPI, Taskiq, and FastMCP with idiomatic patterns.
Breaking Changes¶
None - this is the first stable release.
Migration Guide¶
This is the initial release, so no migration is needed. However, if you're coming from other dependency injection libraries, check out our migration guides.
Known Issues¶
- None currently known
Deprecations¶
- None in this release
Acknowledgments¶
Special thanks to all contributors who helped make this release possible: - Core development team - Beta testers and early adopters - Documentation reviewers - Community feedback providers
Upcoming Features¶
Version 0.2.0 (Planned)¶
- Enhanced plugin system
- Additional framework integrations
- Performance improvements
- Extended diagnostic tools
Version 0.3.0 (Planned)¶
- Configuration management improvements
- Advanced caching strategies
- Monitoring and observability features
- Additional testing utilities
Contributing¶
We welcome contributions! Please see our contributing guide for details on how to contribute to InjectQ.
Support¶
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: InjectQ Docs