singleton_manager_generator
A CLI tool that generates Dart augmentation files for @isSingleton classes, automatically implementing dependency injection setup.
Features
- Scans Dart source files for
@isSingletonand@isInjectedannotations - Generates augmentation files with
ISingletonStandardDIimplementations - Creates
initializeDI()factory methods for each singleton class - Supports multiple injected fields per class
- Minimal overhead - uses Dart's
analyzerpackage for lightweight AST parsing
Installation
Add the packages to your pubspec.yaml:
dependencies:
singleton_manager: ^0.4.0
dev_dependencies:
singleton_manager_generator: ^0.1.5
Note: As of v0.4.0, annotations are included in singleton_manager. No separate annotations package needed!
Usage
1. Annotate your classes
import 'package:singleton_manager/singleton_manager.dart';
@isSingleton
class MyService {
@isInjected
late DatabaseConnection db;
@isInjected
late Logger logger;
}
2. Run the generator
dart run singleton_manager_generator --input lib/src --output lib/generated
Or use melos if set up in your workspace:
melos run generate
3. Use the generated code
The generator creates augmentation files (e.g., my_service_augment.dart) with:
augment class MyService implements ISingletonStandardDI {
factory MyService.initializeDI() {
final instance = MyService();
instance.initializeDI();
return instance;
}
@override
void initializeDI() {
db = SingletonDIAccess.get<DatabaseConnection>();
logger = SingletonDIAccess.get<Logger>();
}
}
Use it in your code:
// Set up dependencies
SingletonDIAccess.set<DatabaseConnection>(myConnection);
SingletonDIAccess.set<Logger>(myLogger);
// Create singleton with auto-injected dependencies
final service = MyService.initializeDI();
CLI Options
--input, -i Input directory containing source Dart files (default: lib)
--output, -o Output directory for generated augmentation files (default: input)
--verbose, -v Enable verbose logging
--help, -h Show help message
Requirements
- Dart SDK >= 3.11.0
package:singleton_manager^0.4.0 (for annotations)package:analyzer^10.0.0 for AST parsingpackage:args^2.5.0 for CLI argument handlingpackage:path^1.9.0 for path utilities
How it works
- Parsing: Scans Dart files using the
analyzerpackage to find AST nodes - Annotation Detection: Identifies classes with
@isSingletonmetadata and fields with@isInjectedmetadata - Code Generation: Creates augmentation files that implement
ISingletonStandardDI - Output: Writes
.singleton_di.dartfiles alongside the original source
Example Project
See the root project's test files for examples of usage.