public void CanBindInitializedCustomIndirectlyDerivedIEnumerableList() { // A field declared as IEnumerable<T> that is instantiated with a class // that indirectly implements IEnumerable<T> is still bound, but with // a new List<T> with the original values copied over. var input = new Dictionary <string, string> { { "AlreadyInitializedCustomListIndirectlyDerivedFromIEnumerable:0", "val0" }, { "AlreadyInitializedCustomListIndirectlyDerivedFromIEnumerable:1", "val1" }, }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(input); var config = configurationBuilder.Build(); var options = new InitializedCollectionsOptions(); config.Bind(options); var array = options.AlreadyInitializedCustomListIndirectlyDerivedFromIEnumerable.ToArray(); Assert.Equal(4, array.Length); Assert.Equal("Item1", array[0]); Assert.Equal("Item2", array[1]); Assert.Equal("val0", array[2]); Assert.Equal("val1", array[3]); }
public void CanBindInitializedIEnumerableAndTheOriginalItemsAreNotMutated() { var input = new Dictionary <string, string> { { "AlreadyInitializedIEnumerableInterface:0", "val0" }, { "AlreadyInitializedIEnumerableInterface:1", "val1" }, { "AlreadyInitializedIEnumerableInterface:2", "val2" }, { "AlreadyInitializedIEnumerableInterface:x", "valx" } }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(input); var config = configurationBuilder.Build(); var options = new InitializedCollectionsOptions(); config.Bind(options); var array = options.AlreadyInitializedIEnumerableInterface.ToArray(); Assert.Equal(6, array.Length); Assert.Equal("This was here too", array[0]); Assert.Equal("Don't touch me!", array[1]); Assert.Equal("val0", array[2]); Assert.Equal("val1", array[3]); Assert.Equal("val2", array[4]); Assert.Equal("valx", array[5]); // the original list hasn't been touched Assert.Equal(2, options.ListUsedInIEnumerableFieldAndShouldNotBeTouched.Count); Assert.Equal("This was here too", options.ListUsedInIEnumerableFieldAndShouldNotBeTouched.ElementAt(0)); Assert.Equal("Don't touch me!", options.ListUsedInIEnumerableFieldAndShouldNotBeTouched.ElementAt(1)); }