public void Invoke_OneParameter()
        {
            ConstructorInfo[]      constructors = GetConstructors(typeof(ClassWith3Constructors));
            ClassWith3Constructors obj          = (ClassWith3Constructors)constructors[1].Invoke(new object[] { 100 });

            Assert.Equal(100, obj.intValue);
        }
        public void Invoke()
        {
            ConstructorInfo[] constructors = GetConstructors(typeof(ClassWith3Constructors));
            Assert.Equal(3, constructors.Length);
            ClassWith3Constructors obj = (ClassWith3Constructors)constructors[0].Invoke(null);

            Assert.NotNull(obj);
        }
        public void Invoke_TwoParameters()
        {
            ConstructorInfo[]      constructors = GetConstructors(typeof(ClassWith3Constructors));
            ClassWith3Constructors obj          = (ClassWith3Constructors)constructors[2].Invoke(new object[] { 101, "hello" });

            Assert.Equal(101, obj.intValue);
            Assert.Equal("hello", obj.stringValue);
        }
        public void Invoke_ExistingInstance()
        {
            // Should not produce a second object.
            ConstructorInfo[]      constructors = GetConstructors(typeof(ClassWith3Constructors));
            ClassWith3Constructors obj1         = new ClassWith3Constructors(100, "hello");
            ClassWith3Constructors obj2         = (ClassWith3Constructors)constructors[2].Invoke(obj1, new object[] { 999, "initialized" });

            Assert.Null(obj2);
            Assert.Equal(999, obj1.intValue);
            Assert.Equal("initialized", obj1.stringValue);
        }
        public void Invoke_TwoParameters_CustomBinder_IncorrectTypeArgument()
        {
            ConstructorInfo[] constructors = GetConstructors(typeof(ClassWith3Constructors));

            var args = new object[] { "101", "hello" };
            ClassWith3Constructors obj = (ClassWith3Constructors)constructors[2].Invoke(BindingFlags.Default, new ConvertStringToIntBinder(), args, null);

            Assert.Equal(101, obj.intValue);
            Assert.Equal("hello", obj.stringValue);
            Assert.True(args[0] is int);
            Assert.True(args[1] is string);
        }
 public void Invoke_ExistingInstance()
 {
     // Should not prouce a second object.
     ConstructorInfo[] constructors = GetConstructors(typeof(ClassWith3Constructors));
     ClassWith3Constructors obj1 = new ClassWith3Constructors(100, "hello");
     ClassWith3Constructors obj2 = (ClassWith3Constructors)constructors[2].Invoke(obj1, new object[] { 999, "initialized" });
     Assert.Null(obj2);
     Assert.Equal(obj1.intValue, 999);
     Assert.Equal(obj1.stringValue, "initialized");
 }