Example #1
0
 //
 // Copy custom properties from parent level.
 //
 private void Reset(ConfigurationElementInterceptor parentElement)
 {
     this.elementXml = parentElement.elementXml;
 }
 //
 // Copy custom properties from parent level.
 //
 private void Reset( ConfigurationElementInterceptor parentElement )
 {
     this.elementXml = parentElement.elementXml;
 }
        public static T Resolve <T>(ConfigurationElementInterceptor customTypeElement, Type customType) where T : class
        {
            if (customTypeElement == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("customTypeElement");
            }

            if (customType == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new TypeLoadException(SR.GetString(SR.ID8030, customTypeElement.ElementAsXml.OuterXml)));
            }

            try
            {
                if (!typeof(T).IsAssignableFrom(customType))
                {
                    throw DiagnosticUtility.ThrowHelperConfigurationError(
                              customTypeElement,
                              ConfigurationStrings.Type,
                              SR.GetString(SR.ID1029, customType.AssemblyQualifiedName, typeof(T)));
                }

                if (customTypeElement.ElementAsXml != null)
                {
                    //
                    // Remove any non-element children such as comments.
                    //
                    foreach (XmlNode node in customTypeElement.ElementAsXml.ChildNodes)
                    {
                        if (node.NodeType != XmlNodeType.Element)
                        {
                            customTypeElement.ElementAsXml.RemoveChild(node);
                        }
                    }
                }

                T createdObject = (T)Activator.CreateInstance(
                    customType,
                    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.CreateInstance,
                    null,
                    null,
                    null
                    );

                if (customTypeElement.ElementAsXml != null && customTypeElement.ElementAsXml.ChildNodes.Count > 0)
                {
                    ICustomIdentityConfiguration customConfiguration = createdObject as ICustomIdentityConfiguration;
                    if (customConfiguration != null)
                    {
                        customConfiguration.LoadCustomConfiguration(customTypeElement.ElementAsXml.ChildNodes);
                    }
                }

                return(createdObject);
            }
            catch (Exception inner)
            {
                if (inner is ConfigurationErrorsException || Fx.IsFatal(inner))
                {
                    throw;
                }
                else if (inner is TargetInvocationException)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(SR.GetString(SR.ID0012, customType.AssemblyQualifiedName), inner));
                }
                else
                {
                    throw DiagnosticUtility.ThrowHelperConfigurationError(customTypeElement, ConfigurationStrings.Type, inner);
                }
            }
        }