private static bool DeserializeDependencyValueElement(
            XmlReader reader,
            string genericParameterName,
            string name,
            out InjectionParameterValueElement valueElement)
        {
            DependencyValueElement element = new DependencyValueElement();

            element.DeserializeElement(reader);

            if (!string.IsNullOrEmpty(genericParameterName) &&
                !string.IsNullOrEmpty(element.TypeName))
            {
                throw new ConfigurationErrorsException(
                          string.Format(
                              CultureInfo.CurrentCulture,
                              Resources.MustNotProvideATypeForDependencyIfBelongsToGeneric,
                              name,
                              element.Name),
                          reader);
            }

            valueElement = element;
            return(true);
        }
        private bool DeserializeDependencyValueElement(XmlReader reader)
        {
            DependencyValueElement element = new DependencyValueElement();

            element.DeserializeElement(reader);
            valueElement = element;
            return(true);
        }
        private bool DeserializeValueElement(XmlReader reader)
        {
            InstanceValueElement element = new InstanceValueElement();

            element.DeserializeElement(reader);
            valueElement = element;
            return(true);
        }
        private static bool DeserializeValueElement(
            XmlReader reader,
            out InjectionParameterValueElement valueElement)
        {
            InstanceValueElement element = new InstanceValueElement();

            element.DeserializeElement(reader);
            valueElement = element;
            return(true);
        }
        /// <summary>
        /// Return the InjectionMember object represented by this configuration
        /// element.
        /// </summary>
        /// <returns>The injection member object.</returns>
        public override InjectionMember CreateInjectionMember()
        {
            if (valueElement == null)
            {
                valueElement = new DependencyValueElement();
            }
            valueElement.TypeResolver = TypeResolver;
            InjectionParameterValue param = valueElement.CreateParameterValue(TypeResolver.ResolveType(PropertyTypeName));

            return(new InjectionProperty(Name, param));
        }
 public static void GuardOnlyOneValue(InjectionParameterValueElement valueElement, string name)
 {
     if (valueElement != null)
     {
         throw new InvalidOperationException(
                   string.Format(
                       CultureInfo.CurrentCulture,
                       Resources.OnlyOneValueElementAllowed,
                       name));
     }
 }
 public static bool DeserializeSingleUnrecognizedElement(
     string elementName,
     XmlReader reader,
     string name,
     string genericParameterName,
     ref InjectionParameterValueElement valueElement)
 {
     GuardOnlyOneValue(valueElement, name);
     return(DeserializeUnrecognizedElement(
                elementName,
                reader,
                name,
                genericParameterName,
                out valueElement));
 }
        private bool DeserializePolymorphicElement(string elementName, XmlReader reader)
        {
            string elementTypeName = reader.GetAttribute("elementType");

            if (!string.IsNullOrEmpty(elementTypeName))
            {
                Type elementType = Type.GetType(elementTypeName);
                InjectionParameterValueElement element =
                    (InjectionParameterValueElement)Activator.CreateInstance(elementType);
                element.DeserializeElement(reader);
                valueElement = element;
                return(true);
            }

            return(base.OnDeserializeUnrecognizedElement(elementName, reader));
        }
        public static bool DeserializeUnrecognizedElement(
            string elementName,
            XmlReader reader,
            string name,
            string genericParameterName,
            out InjectionParameterValueElement valueElement)
        {
            string genericParameter;
            bool   isGenericParameterArray;

            ExtractGenericParameter(genericParameterName, out genericParameter, out isGenericParameterArray);

            switch (elementName)
            {
            case "value":
                GuardNotGeneric(reader, genericParameterName, name);
                return(DeserializeValueElement(
                           reader,
                           out valueElement));

            case "dependency":
                GuardNotGenericArray(reader, isGenericParameterArray, name);
                return(DeserializeDependencyValueElement(
                           reader,
                           genericParameterName,
                           name,
                           out valueElement));

            case "array":
                if (!isGenericParameterArray)
                {
                    GuardNotGeneric(reader, genericParameterName, name);
                }
                return(DeserializeArrayValueElement(
                           reader,
                           out valueElement));

            default:
                GuardNotGeneric(reader, genericParameterName, name);
                return(DeserializePolymorphicElement(
                           reader,
                           out valueElement));
            }
        }
Ejemplo n.º 10
0
        private static bool DeserializePolymorphicElement(
            XmlReader reader,
            out InjectionParameterValueElement valueElement)
        {
            string elementTypeName = reader.GetAttribute("elementType");

            if (!string.IsNullOrEmpty(elementTypeName))
            {
                Type elementType = Type.GetType(elementTypeName);
                InjectionParameterValueElement element =
                    (InjectionParameterValueElement)Activator.CreateInstance(elementType);
                element.DeserializeElement(reader);
                valueElement = element;
                return(true);
            }

            valueElement = null;
            return(false);
        }
Ejemplo n.º 11
0
        public static InjectionParameterValue CreateParameterValue(
            string typeName,
            string genericParameterName,
            InjectionParameterValueElement valueElement,
            UnityTypeResolver typeResolver)
        {
            string genericParameter;
            bool   isGenericParameterArray;

            ExtractGenericParameter(genericParameterName, out genericParameter, out isGenericParameterArray);

            if (!string.IsNullOrEmpty(genericParameter))
            {
                if (!isGenericParameterArray)
                {
                    if (valueElement == null)
                    {
                        return(new GenericParameter(genericParameter));
                    }
                    else
                    {
                        DependencyValueElement dependencyElement = valueElement as DependencyValueElement;
                        if (dependencyElement != null)
                        {
                            if (!string.IsNullOrEmpty(dependencyElement.Name))
                            {
                                return(new GenericParameter(genericParameter, dependencyElement.Name));
                            }
                            else
                            {
                                return(new GenericParameter(genericParameter));
                            }
                        }
                        else
                        {
                            // should not happen - checked during config deserialization
                            throw new InvalidOperationException(Resources.InvalidConfiguration);
                        }
                    }
                }
                else
                {
                    if (valueElement == null)
                    {
                        return(new GenericResolvedArrayParameter(genericParameter));
                    }
                    else
                    {
                        ArrayValueElement arrayElement = valueElement as ArrayValueElement;
                        if (arrayElement != null)
                        {
                            return(arrayElement.CreateParameterValue(genericParameter));
                        }
                        else
                        {
                            // should not happen - checked during config deserialization
                            throw new InvalidOperationException(Resources.InvalidConfiguration);
                        }
                    }
                }
            }
            else
            {
                if (valueElement == null)
                {
                    valueElement = new DependencyValueElement();
                }
                valueElement.TypeResolver = typeResolver;
                return(valueElement.CreateParameterValue(typeResolver.ResolveType(typeName)));
            }
        }