Compile-Time Dependency Injection for Dart & Flutter
This package provides the annotations used to declare a compile-time dependency injection (DI) graph. It is a modern, sound null-safe port of the original inject.dart from Google.
Since this library generates code at compile time, it does not rely on runtime reflection or any kind of dynamic lookup. This ensures maximum performance and minimal build sizes for Flutter and standalone Dart applications.
Getting Started
Add inject_compile as a dependency and inject_compile_generator as a dev
dependency in your pubspec.yaml file:
dependencies:
inject_compile: ^0.9.0
dev_dependencies:
build_runner: ^2.4.0
inject_compile_generator: ^0.9.0
Annotations
@provide
Marks a constructor, method, or getter as providing a dependency.
- On a class constructor: Registers the class in the dependency graph so the framework knows how to instantiate it.
- On a module method/getter: Registers the return type as a dependency. The framework calls this member to obtain the instance.
@module
Marks a class as a module. Modules contain provider methods for dependencies that cannot be easily instantiated directly (such as interfaces, third-party classes, or asynchronous resources).
@injector
Marks an abstract class as the root of a dependency injection graph. The code
generator creates a concrete implementation subclass (e.g., YourClass$Injector)
implementing this interface.
@singleton
Combined with @provide, indicates that a dependency is instantiated only once
per injector instance. All subsequent requests return the same instance.
@asynchronous
Marks a provider method returning a Future as asynchronous. The generated
injector awaits the future during creation, resolving the value synchronously
for any dependent classes.
@Qualifier
Differentiates multiple bindings of the same type by associating a symbol
(e.g., @Qualifier(#name)) with the provider.
Next Steps
- To run the generator, refer to the
inject_compile_generatorpackage page. - For complete samples, see the workspace examples.
Acknowledgement
Please note that all of the original code in inject.dart which these packages is heavily based on is Copyright by Google and originally licenced under a MIT Licence which has been kept. Special thanks to Matan Lurey who was the primary original author.
Libraries
- inject_compile
- A dependency injection framework for Dart.