public static void AddMethodInstantiationElement(string typeName, string methodName, string arguments, DotNetNativePolicy browse = null, DotNetNativePolicy dynamic = null)
        {
            DotNetNativeAssistantTypeElement element = FindTypeElement(typeName);

            if (element == null)
            {
                element = new DotNetNativeAssistantTypeElement()
                {
                    TypeName = typeName
                };
                Elements.Add(element);
            }
            else
            {
                if (element.IsEmpty)
                {
                    return;
                }
            }
            DotNetNativeAssistantMethodInstantiationElement methodInstantiation = element.FindMethodInstantiationElement(typeName, arguments);

            if (methodInstantiation == null)
            {
                methodInstantiation = new DotNetNativeAssistantMethodInstantiationElement(element)
                {
                    MethodName = methodName, Arguments = arguments
                };
                element.MethodInstantiationElements.Add(methodInstantiation);
            }
            methodInstantiation.Browse  = browse;
            methodInstantiation.Dynamic = dynamic;
        }
        public static void AddFieldElement(string typeName, string fieldName, DotNetNativeMemberPolicy browse = null, DotNetNativeMemberPolicy dynamic = null, DotNetNativeMemberPolicy serialize = null)
        {
            if (!IsEnabled)
            {
                return;
            }
            DotNetNativeAssistantTypeElement element = FindTypeElement(typeName);

            if (element == null)
            {
                element = new DotNetNativeAssistantTypeElement()
                {
                    TypeName = typeName
                };
                Elements.Add(element);
            }
            else
            {
                if (element.IsEmpty)
                {
                    return;
                }
            }
            DotNetNativeAssistantFieldElement field = element.FindFieldElement(fieldName);

            if (field == null)
            {
                field = new DotNetNativeAssistantFieldElement(element)
                {
                    FieldName = fieldName
                };
                element.FieldElements.Add(field);
            }
            field.Browse    = browse;
            field.Dynamic   = dynamic;
            field.Serialize = serialize;
        }
        public static DotNetNativeAssistantTypeElement AddTypeElement(string typeName, DotNetNativePolicy activate = null, DotNetNativePolicy browse     = null, DotNetNativePolicy dynamic = null,
                                                                      DotNetNativePolicy serialize     = null, DotNetNativePolicy dataContractSerializer = null, DotNetNativePolicy dataContractJsonSerializer = null,
                                                                      DotNetNativePolicy xmlSerializer = null, DotNetNativePolicy marshalObject          = null, DotNetNativePolicy marshalDelegate = null, DotNetNativePolicy marshalStructure = null)
        {
            if (!IsEnabled)
            {
                return(null);
            }
            DotNetNativeAssistantTypeElement typeElement = FindTypeElement(typeName);

            if (typeElement == null)
            {
                typeElement = new DotNetNativeAssistantTypeElement()
                {
                    TypeName = typeName
                };
                Elements.Add(typeElement);
            }
            else
            {
                if (!typeElement.IsEmpty)
                {
                    typeElement.Clear();
                }
            }
            typeElement.Activate  = activate;
            typeElement.Browse    = browse;
            typeElement.Dynamic   = dynamic;
            typeElement.Serialize = serialize;
            typeElement.DataContractSerializer     = dataContractJsonSerializer;
            typeElement.DataContractJsonSerializer = dataContractJsonSerializer;
            typeElement.XmlSerializer    = xmlSerializer;
            typeElement.MarshalObject    = marshalObject;
            typeElement.MarshalDelegate  = marshalDelegate;
            typeElement.MarshalStructure = marshalStructure;
            return(typeElement);
        }
        public static void AddPropertyElement(string typeName, string propertyName, DotNetNativeMemberPolicy browse = null, DotNetNativeMemberPolicy dynamic = null, DotNetNativeMemberPolicy serialize = null)
        {
            if (!IsEnabled)
            {
                return;
            }
            DotNetNativeAssistantTypeElement element = FindTypeElement(typeName);

            if (element == null)
            {
                element = new DotNetNativeAssistantTypeElement()
                {
                    TypeName = typeName
                };
                Elements.Add(element);
            }
            else
            {
                if (element.IsEmpty)
                {
                    return;
                }
            }
            DotNetNativeAssistantPropertyElement property = element.FindPropertyElement(propertyName);

            if (property == null)
            {
                property = new DotNetNativeAssistantPropertyElement(element)
                {
                    PropertyName = propertyName
                };
                element.PropertyElements.Add(property);
            }
            property.Browse    = browse;
            property.Dynamic   = dynamic;
            property.Serialize = serialize;
        }