ServiceRegistry class

Dependency Injection Container for managing service lifecycle

Features:

  • Singleton pattern - one instance per application
  • Platform-aware service selection (web vs mobile)
  • Lazy initialization of services
  • Constructor injection for testability
  • Clear separation of concerns

Platform Support:

  • Mobile: Uses dart:io-based services (PlatformFileSystemService, BackgroundDownloaderService)
  • Web: Uses URL-based services (WebFileSystemService, WebDownloadService)

Requirements:

  • Mobile platforms require Flutter bindings to be initialized before ServiceRegistry (BackgroundDownloaderService uses path_provider which requires bindings)
  • Call WidgetsFlutterBinding.ensureInitialized() in main() before using ServiceRegistry

Usage:

void main() {
  WidgetsFlutterBinding.ensureInitialized(); // Required for mobile
  ServiceRegistry.initialize();
  runApp(MyApp());
}

// Later in your code:
final registry = ServiceRegistry.instance;
final handlerRegistry = registry.sourceHandlerRegistry;
final handler = handlerRegistry.getHandler(source);
await handler.install(source);

Properties

assetHandler → SourceHandler
no setter
assetLoader → AssetLoader
no setter
bundledHandler → SourceHandler
no setter
downloadService → DownloadService
no setter
enableWebCache → bool
Backward compatibility getter for enableWebCache
no setter
fileHandler → SourceHandler
no setter
fileSystemService → FileSystemService
no setter
hashCode → int
The hash code for this object.
no setterinherited
huggingFaceToken → String?
final
maxDownloadRetries → int
final
modelRepository → ModelRepository
no setter
networkHandler → SourceHandler
no setter
protectedFilesRegistry → ProtectedFilesRegistry
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
sourceHandlerRegistry → SourceHandlerRegistry
no setter
useStreamingStorage → bool
Check if streaming storage mode is enabled (OPFS)
no setter
vectorStoreRepository → VectorStoreRepository
Access VectorStoreRepository for document embedding storage
no setter
webStorageMode → WebStorageMode
final

Methods

dispose() → Future<void>
Disposes all services and releases resources
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Properties

instance → ServiceRegistry
Gets the singleton instance
no setter

Static Methods

initialize({String? huggingFaceToken, int maxDownloadRetries = 10, WebStorageMode webStorageMode = WebStorageMode.cacheApi, FileSystemService? fileSystemService, AssetLoader? assetLoader, DownloadService? downloadService, ModelRepository? modelRepository, ProtectedFilesRegistry? protectedFilesRegistry, VectorStoreRepository? vectorStoreRepository, FilterSchema filterSchema = const FilterSchema(), Stream<Object>? downloadUpdatesStream}) → Future<void>
Initializes the singleton instance
reset() → void
Resets the singleton (primarily for testing)