/// <summary> /// Gets a registration from an xml element /// </summary> /// <param name="registrationElement"></param> /// <returns></returns> private static Registration CreateRegistration(XmlElement registrationElement) { registrationElement.ShouldBeNamed(RegistrationElementName); // initialize injection constructor to null InjectionConstructor injectionConstructor = null; // check for an injection constructor element var injectionConstructorElement = registrationElement.ChildNodes.OfType<XmlElement>() .FirstOrDefault(x => x.Name == InjectionConstructorElementName); if (injectionConstructorElement != null) injectionConstructor = GetInjectionConstructor(injectionConstructorElement); return new Registration(registrationElement.GetTypeFromAttribute(RegistrationTypeAttributeName), registrationElement.GetTypeFromAttribute(RegistrationMapToAttributeName), GetLifetimeManager(registrationElement, RegistrationLifetimeAttributeName), registrationElement.GetAttributeValue(RegistrationNameAttributeName, false), injectionConstructor); }
/// <summary> /// Gets a parameter for a constructor from a parameter XmlElement /// </summary> /// <param name="parameterElement"></param> /// <returns></returns> private static object GetConstructorParameter(XmlElement parameterElement) { // ensure element is parameter element parameterElement.ShouldBeNamed(ParameterElementName); // get flag indicating whether or not to resolve the value of the parameter var resolve = parameterElement.GetAttributeValue(ResolveAttributeName).ConvertTo<bool>(); // get the type of the parameter var type = parameterElement.GetTypeFromAttribute(TypeAttributeName); // get value to be passed in - if resolving, this is not required var value = parameterElement.GetAttributeValue(ValueAttributeName, !resolve); // get value for parameter return resolve ? new ResolvedParameter(type, string.IsNullOrWhiteSpace(value) ? value : null) : value.ConvertTo(type); }
/// <summary> /// Creates a custom section /// </summary> /// <param name="xmlElement"></param> /// <returns></returns> private static IAssemblyConfigurationSection CreateCustomSection(XmlElement xmlElement) { try { // get the section type from its type attribute var sectionType = xmlElement.GetTypeFromAttribute(CustomSectionTypeAttributeName); // create an instance of the section's type var customSection = (IAssemblyConfigurationSection)Activator.CreateInstance(sectionType); // load the section from xml customSection.Load(xmlElement); return customSection; } catch (Exception ex) { Debug.WriteLine(ex.ToString()); throw; } }