feat: Replace deprecated injector with custom DI framework#2
Open
feat: Replace deprecated injector with custom DI framework#2
Conversation
Replaces the deprecated `alecthomas/injector` library with a new, custom-built dependency injection framework named `custom_injector`.
Key changes and features include:
- **New Core DI Framework (`custom_injector`):**
- Supports class, factory, and value providers.
- Implements robust Transient and Singleton scopes.
- Provides automatic constructor injection based on type hints.
- Includes basic circular dependency detection.
- **Updated Integrations:**
- All `fastapi_injector` components (for both FastAPI and Taskiq) have been refactored to use the new `custom_injector`. This includes:
- Injector attachment mechanisms.
- `Injected`, `SyncInjected`, `InjectedTaskiq`, and `SyncInjectedTaskiq` decorators.
- Request scoping logic (`RequestScope`, `RequestScopeFactory`, `InjectorMiddleware`).
- **Testing:**
- Added comprehensive unit tests for the `custom_injector` core.
- Updated existing integration tests for FastAPI (`tests/test_injection.py`, `tests/test_request_scope.py`) to be compatible with the new framework.
- **Dependency Management:**
- Removed `alecthomas/injector` from the project's dependencies in `pyproject.toml`.
- **Documentation:**
- Updated `README.md` to reflect the new DI system, its API (e.g., `injector.bind()` syntax, scope usage), and updated examples.
This change addresses the issue of using a deprecated library and aims to provide a more stable and maintainable foundation for dependency injection within the `fastapi-injector` project, with particular attention to reliable singleton instance management.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the deprecated
alecthomas/injectorlibrary with a new, custom-built dependency injection framework namedcustom_injector.Key changes and features include:
New Core DI Framework (
custom_injector):Updated Integrations:
fastapi_injectorcomponents (for both FastAPI and Taskiq) have been refactored to use the newcustom_injector. This includes: - Injector attachment mechanisms. -Injected,SyncInjected,InjectedTaskiq, andSyncInjectedTaskiqdecorators. - Request scoping logic (RequestScope,RequestScopeFactory,InjectorMiddleware).Testing:
custom_injectorcore.tests/test_injection.py,tests/test_request_scope.py) to be compatible with the new framework.Dependency Management:
alecthomas/injectorfrom the project's dependencies inpyproject.toml.Documentation:
README.mdto reflect the new DI system, its API (e.g.,injector.bind()syntax, scope usage), and updated examples.This change addresses the issue of using a deprecated library and aims to provide a more stable and maintainable foundation for dependency injection within the
fastapi-injectorproject, with particular attention to reliable singleton instance management.