public void Test() { var f = new Foo { Name = "o", Fox = new Foo { Name = "a", Fox = new Foo { Name = "b3" } }, Foos = new[] { new Foo { Name = "arr1" }, new Foo { Name = "arr2" }, } }; var f1 = new Foo(); f1.InjectFrom(f); Assert.AreEqual(f1.Fox, f.Fox); f1.InjectFrom<CloneInjection>(f); Assert.AreNotEqual(f1.Fox, f.Fox); Assert.AreNotEqual(f1.Fox.Fox, f.Fox.Fox); Assert.AreEqual(f1.Fox.Name, f.Fox.Name); Assert.AreEqual(f1.Fox.Fox.Name, f.Fox.Fox.Name); }