initialize method
Future<void>
initialize(
- Map<
ModuleRegistryKey, ModuleController> globalModuleRegistry, { - Set<
Type> ? resolutionStack, - Set<
ModuleGraphNodeKey> ? graphResolutionStack,
Runs the full initialization lifecycle for this module.
Uses globalModuleRegistry to deduplicate module controllers across
concurrent import branches. Pass graphResolutionStack for cycle
detection when resolving nested imports.
Throws CircularDependencyException, ModuleConfigurationException, or ModuleLifecycleException on failure.
Implementation
Future<void> initialize(
Map<ModuleRegistryKey, ModuleController> globalModuleRegistry, {
/// Legacy type-only cycle stack. Prefer [graphResolutionStack].
Set<Type>? resolutionStack,
Set<ModuleGraphNodeKey>? graphResolutionStack,
}) {
switch (_currentStatus) {
case ModuleStatus.initial:
_initializeFuture ??= _initializeInternal(
globalModuleRegistry,
resolutionStack: resolutionStack,
graphResolutionStack: graphResolutionStack,
);
return _initializeFuture!;
case ModuleStatus.loading:
return _initializeFuture ?? Future<void>.value();
case ModuleStatus.loaded:
return Future<void>.value();
case ModuleStatus.error:
return Future<void>.error(
ModuleLifecycleException(
'Module ${module.runtimeType} failed to initialize previously. '
'Create a new ModuleController to retry initialization.',
moduleType: module.runtimeType,
state: ModuleStatus.error,
),
);
case ModuleStatus.disposed:
return Future<void>.error(
ModuleLifecycleException(
'Module ${module.runtimeType} has been disposed and cannot be initialized again.',
moduleType: module.runtimeType,
state: ModuleStatus.disposed,
),
);
}
}