[NUI] Support constructor with default parameter (#893)
authorXianbing Teng <xb.teng@samsung.com>
Thu, 20 Jun 2019 06:13:14 +0000 (14:13 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Thu, 20 Jun 2019 06:13:14 +0000 (15:13 +0900)
src/Tizen.NUI/src/internal/Xaml/CreateValuesVisitor.cs

index c4e4c50..9801ff8 100755 (executable)
@@ -88,7 +88,16 @@ namespace Tizen.NUI.Xaml
                     }
                     if (value == null)
                     {
-                        value = Activator.CreateInstance(type);
+                        if (type.GetTypeInfo().DeclaredConstructors.Any(ci => ci.IsPublic && ci.GetParameters().Length == 0))
+                        {
+                            //default constructor
+                            value = Activator.CreateInstance(type);
+                        }
+                        else
+                        {
+                            //constructor with all default parameters
+                            value = Activator.CreateInstance(type, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance | BindingFlags.OptionalParamBinding, null, new object[] { Type.Missing }, CultureInfo.CurrentCulture);
+                        }
                         if (value is Element)
                         {
                             if (null != Application.Current)
@@ -216,7 +225,7 @@ namespace Tizen.NUI.Xaml
             if (!node.Properties.ContainsKey(XmlName.xFactoryMethod))
             {
                 //non-default ctor
-                object ret = Activator.CreateInstance(nodeType, arguments);
+                object ret = Activator.CreateInstance(nodeType, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance | BindingFlags.OptionalParamBinding, null, arguments, CultureInfo.CurrentCulture); ;
                 if (ret is Element)
                 {
                     if (null != Application.Current)