public ItemMigratorsStore([ItemNotNull][NotNull] IReadOnlyCollection <IItemMigrator> itemMigrators)
        {
            ThrowIf.Argument.IsNull(itemMigrators, nameof(itemMigrators));

            var roorNode = new ItemMigratorsStoreNode();

            foreach (var itemMigrator in itemMigrators.WithNullChecking())
            {
                roorNode.AddItemMigrator(itemMigrator);
            }

            RootNode = roorNode;
        }
        private void AddItemMigrator([NotNull] IItemMigrator itemMigrator, int depthLevel)
        {
            if (depthLevel == itemMigrator.SupportedItemPath.Count)
            {
                ItemMigrator = itemMigrator;
                return;
            }

            if (ItemMigrator != null)
            {
                throw new InvalidOperationException($"{ItemMigrator} hides {itemMigrator}");
            }

            var itemName = itemMigrator.SupportedItemPath[depthLevel];

            if (!_children.TryGetValue(itemName, out var child))
            {
                child = new ItemMigratorsStoreNode();
                _children.Add(itemName, child);
            }

            child.AddItemMigrator(itemMigrator, depthLevel + 1);
        }