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); }