public void Test__Set() { // Arrange var a = new EntityA { Name1 = "A" }; var b = new EntityB { Name2 = "B" }; var multiTypeItems = new MultiTypeBinderBuilder <Key>() .WithType <EntityA>(opt1 => opt1 .WithProperty(x => x.Name1, opt2 => opt2 .Bind(Key.Name) .WithGetter(x => x.Name1) .WithSetter((x, y) => x.Name1 = y)) .FinalizeType()) .WithType <EntityB>(opt1 => opt1 .WithProperty(x => x.Name2, opt2 => opt2 .Bind(Key.Name) .WithGetter(x => x.Name2) .WithSetter((x, y) => x.Name2 = y)) .FinalizeType()) .Build() .Map(new List <object> { a, b }); // Act multiTypeItems.First()[Key.Name] = "updated A"; multiTypeItems.Last()[Key.Name] = "updated B"; var v1 = multiTypeItems.First()[Key.Name]; var v2 = multiTypeItems.Last()[Key.Name]; // Assert Assert.Equal(2, multiTypeItems.Count); Assert.Equal("updated A", v1); Assert.Equal("updated B", v2); }