Ошибка возникшая в 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];
}
}
}