using System.Collections.Generic; using Cysharp.Threading.Tasks; namespace Code.Infrastructure.Volume { public interface IVolumeService { UniTask LoadVolume(VolumeId volumeId); void RemoveVolume(VolumeId volumeId); } public class VolumeService : IVolumeService { private readonly Dictionary _loadedVolumes = new(); private readonly IVolumeFactory _factory; public VolumeService(IVolumeFactory factory) { _factory = factory; } public async UniTask LoadVolume(VolumeId volumeId) { var volume = await _factory.LoadVolume(volumeId); _loadedVolumes.Add(volumeId, volume); } public void RemoveVolume(VolumeId volumeId) { _factory.ReleaseVolume(_loadedVolumes[volumeId]); _loadedVolumes.Remove(volumeId); } } }