.cursor/skills/dependency-injection-getit/SKILL.md
Guides GetIt dependency injection patterns for service registration. Use when creating new services, registering dependencies, or refactoring service architecture.
npx skillsauth add avra-cadavra/avrai dependency-injection-getitInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
All services must be registered in dependency injection containers using GetIt.
lib/injection_container_core.dartlib/injection_container.dartlib/injection_container_ai.dartlib/injection_container_payment.dartlib/injection_container_admin.dart// Use registerLazySingleton (NOT registerSingleton)
sl.registerLazySingleton<MyService>(() => MyService(
dependencyService: sl<DependencyService>(),
));
// Register dependencies BEFORE dependents
sl.registerLazySingleton(() => DependencyService());
sl.registerLazySingleton(() => MyService(
dependencyService: sl<DependencyService>(),
));
// Check if already registered to avoid duplicates
if (!sl.isRegistered<MyService>()) {
sl.registerLazySingleton<MyService>(() => MyService(
dependencyService: sl<DependencyService>(),
));
}
// Register MyService (for specific purpose description)
sl.registerLazySingleton<MyService>(() => MyService(
dependencyService: sl<DependencyService>(),
));
class MyService {
final DependencyService _dependencyService;
final OptionalService? _optionalService;
MyService({
required DependencyService dependencyService,
OptionalService? optionalService,
}) : _dependencyService = dependencyService,
_optionalService = optionalService;
}
❌ Circular Dependency:
sl.registerLazySingleton(() => ServiceA(serviceB: sl<ServiceB>()));
sl.registerLazySingleton(() => ServiceB(serviceA: sl<ServiceA>())); // ERROR
❌ Wrong Order:
sl.registerLazySingleton(() => MyService(dep: sl<Dependency>())); // ERROR: Dependency not registered yet
sl.registerLazySingleton(() => Dependency());
❌ Wrong Lifecycle:
sl.registerFactory(() => MyService()); // BAD: Should be singleton
See existing registrations in:
lib/injection_container_core.dartlib/injection_container.dartdevelopment
--- name: world-model-development description: Guides world model development patterns: state/action encoders, ONNX inference, feature extraction pipeline, latency budgets. Use when implementing world model components, state encoders, action encoders, feature extractors, or ONNX models. Core skill for Phases 3-6. --- # World Model Development Patterns ## Core Principle All world model components follow LeCun's autonomous machine intelligence framework. State observations flow through a percep
tools
Implements base workflow controller patterns for multi-step processes. Use when creating complex workflows that require orchestration of multiple steps with error handling and rollback.
testing
--- name: widget-test-patterns description: Guides widget test patterns: BLoC testing, user interactions, state changes, material app setup. Use when writing widget tests, testing UI components, or validating widget behavior. --- # Widget Test Patterns ## Core Pattern Widget tests verify UI behavior: user interactions, state changes, and visual display. ## Basic Widget Test Setup ```dart testWidgets('widget displays correctly', (WidgetTester tester) async { // Arrange: Create widget awa
testing
--- name: test-template-generation description: Generates test templates: unit, widget, integration, service tests following project patterns. Use when creating new tests or ensuring tests follow project standards. --- # Test Template Generation ## Available Templates Test templates are located in `test/templates/`: - `unit_test_template.dart` - `widget_test_template.dart` - `integration_test_template.dart` - `service_test_template.dart` ## Unit Test Template ```dart /// SPOTS Component Uni