public override bool Instantiate(IInstanceBuilderContext context, ViewNode viewNode)
        {
            string str;

            if (viewNode.Instance == null)
            {
                DesignInstanceExtension instance = null;
                using (IDisposable disposable = context.ChangeSerializationContext(null))
                {
                    base.Instantiate(context, viewNode);
                    instance = viewNode.Instance as DesignInstanceExtension;
                }
                instance.Instance = null;
                Type typeToInstantiate = this.GetTypeToInstantiate(context, instance, out str);
                if (typeToInstantiate != null)
                {
                    if (context.IsSerializationScope)
                    {
                        IType type = context.DocumentContext.TypeResolver.GetType(typeToInstantiate);
                        context.DocumentContext.CreateNode(type);
                        viewNode.Instance      = context.DocumentContext.CreateNode(typeToInstantiate);
                        viewNode.InstanceState = InstanceState.Valid;
                    }
                    else
                    {
                        instance.Instance      = Activator.CreateInstance(typeToInstantiate);
                        viewNode.Instance      = instance;
                        viewNode.InstanceState = InstanceState.Valid;
                    }
                }
                else if (!string.IsNullOrEmpty(str))
                {
                    context.WarningDictionary.SetWarning(viewNode, viewNode.DocumentNode, str);
                }
                if (viewNode.Instance == instance && instance.Instance == null)
                {
                    viewNode.Instance      = null;
                    viewNode.InstanceState = InstanceState.Valid;
                }
            }
            return(viewNode.Instance != null);
        }
        private Type GetTypeToInstantiate(IInstanceBuilderContext context, DesignInstanceExtension designMarkupExtension, out string warning)
        {
            warning = null;
            if (designMarkupExtension.Type == null)
            {
                return(null);
            }
            if (designMarkupExtension.IsDesignTimeCreatable && !designMarkupExtension.CreateList)
            {
                return(designMarkupExtension.Type);
            }
            if (!designMarkupExtension.IsDesignTimeCreatable && !DesignTypeInstanceBuilder.IsTypeEmittable(designMarkupExtension.Type))
            {
                CultureInfo currentCulture = CultureInfo.CurrentCulture;
                string      instanceBuilderDesignTypeCannotBeLateBound = ExceptionStringTable.InstanceBuilderDesignTypeCannotBeLateBound;
                object[]    name = new object[] { designMarkupExtension.Type.Name };
                warning = string.Format(currentCulture, instanceBuilderDesignTypeCannotBeLateBound, name);
                return(null);
            }
            DesignTypeResult typeToInstantiate = DesignTypeInstanceBuilder.GetTypeToInstantiate(context.DocumentContext.TypeResolver.PlatformMetadata, designMarkupExtension.Type, designMarkupExtension.CreateList, designMarkupExtension.IsDesignTimeCreatable);

            if (!typeToInstantiate.IsFailed)
            {
                return(typeToInstantiate.DesignType);
            }
            if (string.IsNullOrEmpty(typeToInstantiate.Context))
            {
                warning = typeToInstantiate.TypeGenerationException.Message;
            }
            else
            {
                CultureInfo currentUICulture = CultureInfo.CurrentUICulture;
                object[]    message          = new object[] { typeToInstantiate.TypeGenerationException.Message, typeToInstantiate.Context };
                warning = string.Format(currentUICulture, "{0} ({1})", message);
            }
            return(null);
        }