register method

  1. @override
void register(
  1. Container container
)
override

Register services with the container.

This method is called when the provider is registered with the container. Use this method to register bindings, instances, and aliases.

Implementation

@override
void register(Container container) {
  _ensureDefaultDriversRegistered();

  if (container.has<StorageManager>()) {
    _managedManager = null;
    final existing = container.get<StorageManager>();
    _registerStorageDefaults(container, existing);
    return;
  }

  final defaultFs = container.has<EngineConfig>()
      ? container.get<EngineConfig>().fileSystem
      : null;

  final manager = StorageManager(defaultFileSystem: defaultFs);
  _managedManager = manager;

  if (container.has<Config>()) {
    _applyConfig(container, manager, container.get<Config>());
  } else {
    final registered = _registerDefaultDisk(
      container,
      manager,
      storageRoot: defaultStorageRootPath(),
    );
    final defaultName = manager.defaultDisk;
    final facadeDisks = <String, Map<String, dynamic>>{};
    final localFileSystems = <String, file.FileSystem>{};
    if (registered != null) {
      facadeDisks[registered.key] = registered.value;
      final disk = manager.disk(registered.key);
      if (disk is LocalStorageDisk) {
        localFileSystems[registered.key] = disk.fileSystem;
      }
    } else if (manager.hasDisk(defaultName)) {
      facadeDisks[defaultName] = _configFromDisk(manager.disk(defaultName));
      final disk = manager.disk(defaultName);
      if (disk is LocalStorageDisk) {
        localFileSystems[defaultName] = disk.fileSystem;
      }
    }
    _initializeStorageFacade(
      defaultDisk: defaultName,
      cloudDisk: null,
      disks: facadeDisks,
      localFileSystems: localFileSystems,
    );
  }

  container.instance<StorageManager>(manager);
  _registerStorageDefaults(container, manager);
}