Ошибка возникшая в Unity, вызванная программой Visual Studio

ArgumentException: An item with the same key has already been added. Key: Levels.LevelNumber
System.Collections.Generic.Dictionary`2[TKey,TValue].TryInsert (TKey key, TValue value, System.Collections.Generic.InsertionBehavior behavior) (at <b11ba2a8fbf24f219f7cc98532a11304>:0)
System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) (at <b11ba2a8fbf24f219f7cc98532a11304>:0)
IoC.Container.Register[T] (T instance) (at Assets/Scripts/IoC/Container.cs:11)
DataPersistence.Initialization.LevelInitialization.InitializeAsync () (at Assets/Scripts/DataPersistence/Initialization/LevelInitialization.cs:19)
Infrastructure.Bootstrap.OnEnable () (at Assets/Scripts/Infrastructure/Bootstrap.cs:20)
System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) (at <b11ba2a8fbf24f219f7cc98532a11304>:0)
UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <55fbbbd17b724c15b6abe8c1a3e3289c>:0)
UnityEngine.UnitySynchronizationContext.Exec () (at <55fbbbd17b724c15b6abe8c1a3e3289c>:0)
UnityEngine.UnitySynchronizationContext.ExecuteTasks () (at <55fbbbd17b724c15b6abe8c1a3e3289c>:0)

Возникает ошибка в Unity. Она появляется во время игры. Когда происходит перекомпиляция скриптов, и ты после этого заходишь в игру первый раз и играешь, то эта ошибка не возникает, а вот когда ты выходишь из игры и пытаешься в нее войти второй раз, то возникает эта ошибка. Для того, чтобы устранить эту ошибку, нужно изменить код, и убрать из него дубликаты слов.

Вот мой код:

using System.Threading.Tasks;
using DataPersistence.Files;
using DataPersistence.Saves;
using IoC;
using Levels;
using UnityEngine;

namespace DataPersistence.Initialization
{
    public class LevelInitialization : AsyncInitialization
    {
        [SerializeField] private FilePathSo _filePath;
        
        private readonly IAsyncFileService _fileService = new JsonNetFileService();

        public override async Task InitializeAsync()
        {
            LevelNumber levelNumber = await _fileService.LoadAsync<LevelNumber> 
            (_filePath.Value) ?? EnsureCreated();
            Container.Register(levelNumber);
        }

        private LevelNumber EnsureCreated() => 
            new LevelNumber() { Value = 1 };
    }
}
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DataPersistence.Initialization;
using GameStates.Base;
using GameStates.States;
using UnityEngine;

namespace Infrastructure
{
    public class Bootstrap : MonoBehaviour
    {
        [SerializeField] private AsyncInitialization[] _initializations;
        [SerializeField] private GameStateMachineSo _stateMachine;

        private async void OnEnable()
        {
            IEnumerable<Task> initializations = _initializations.Select(x => 
            x.InitializeAsync());

            await Task.WhenAll(initializations);
            
            _stateMachine.Enter<MenuEntryStateSo>();
         }
    }
}
using System;
using System.Collections.Generic;

namespace IoC
{
     public class Container
     {
        private static readonly Dictionary<Type, object> _context = new Dictionary<Type, object>();

        public static void Register<T>(T instance) =>
            _context.Add(typeof(T), instance);

        public static T InstanceOf<T>()
        {
            Type key = typeof(T);
            return (T)_context[key];
        }
    }
}

Ответы (0 шт):