コード例 #1
0
        /// <summary>
        /// Parses the configuration node using the nohros schema.
        /// </summary>
        /// <param name="element">
        /// A Xml element representing the configuration root node.
        /// </param>
        /// <remarks>
        /// The <paramref name="element"/> does not need to be the nohros
        /// configuration node, but a node with name "nohros" must exists on the
        /// node hierarchy.
        /// </remarks>
        T Parse(XmlElement element)
        {
            XmlElement root_node = GetRootNode(element);

            // the logger is used by some methods above and the level threshold of it
            // could be overloaded by a configuration key. So, we need to do the
            // first logger instantiation here and adjust the threshold level if
            // needed.
            builder.SetLogLevel(GetLogLevel(root_node));

            // parse any internal property
            if (use_dynamic_property_assignment_)
            {
                ParseProperties(element, this);
                ParseProperties(element, builder);
            }

            // parse the know configuration nodes.
            foreach (XmlNode node in root_node.ChildNodes)
            {
                if (node.NodeType == XmlNodeType.Element)
                {
                    string name = node.Name;
                    if (Strings.AreEquals(name, Strings.kRepositoriesNodeName))
                    {
                        builder.SetRepositories(RepositoriesNode.Parse((XmlElement)node,
                                                                       location_));
                    }
                    else if (Strings.AreEquals(name, Strings.kProvidersNodeName))
                    {
                        builder.SetProviders(ProvidersNode.Parse((XmlElement)node,
                                                                 location_));
                    }
                    else if (Strings.AreEquals(name, Strings.kXmlElementsNodeName))
                    {
                        XmlElementsNode xml_elements =
                            XmlElementsNode.Parse((XmlElement)node);

                        // Add the element that was used to configure this class to the
                        // collection of xml elements nodes.
                        xml_elements[Strings.kRootXmlElementName] = element;
                        builder.SetXmlElements(xml_elements);
                    }
                }
            }

            OnParseComplete(this);

            T configuration = CreateConfiguration(builder);

            OnLoadComplete(configuration);

            return(configuration);
        }
コード例 #2
0
        public void ShouldResolveOptionsReferences()
        {
            const string xml_config_file = @"<providers>
    <options name='sql-connection-provider'>
      <option name='connection-string' value='SQL-CONNECTION-STRING'/>
      <option name='schema' value='dbo'/>
    </options>
    <options name=""my-options"">
      <option ref='sql-connection-provider'/>
    </options>

    <provider name=""my-provider"" type="""">
      <options>
        <option name ='my-provider-option'/>
        <option ref='sql-connection-provider'/>
      </options>
    </provider>

    <provider name=""my-provider-two"" type="""">
      <options>
        <option ref='my-options'/>
      </options>
    </provider>
  </providers>";

            var document = new XmlDocument();

            document.LoadXml(xml_config_file);
            var            xml_element    = (XmlElement)document.FirstChild;
            IProvidersNode providers_node = ProvidersNode.Parse(xml_element,
                                                                Path.AbsoluteForApplication(string.Empty));

            Assert.AreEqual(1, providers_node.Count);
            IProviderNode provider = providers_node[string.Empty]["my-provider"];

            Assert.AreEqual(3, provider.Options.Count);
            Assert.AreEqual(true, provider.Options.ContainsKeys("connection-string"));
            Assert.AreEqual(true, provider.Options.ContainsKeys("schema"));
            Assert.AreEqual(true, provider.Options.ContainsKeys("my-provider-option"));

            Assert.AreEqual(1, providers_node.Count);
            provider = providers_node[string.Empty]["my-provider-two"];
            Assert.AreEqual(2, provider.Options.Count);
            Assert.AreEqual(true, provider.Options.ContainsKeys("connection-string"));
            Assert.AreEqual(true, provider.Options.ContainsKeys("schema"));
        }
コード例 #3
0
        public void ShouldThrowExceptionWhenOptionReferenceDoesNotExist()
        {
            const string xml_config_file = @"<providers>
    <options name=""sql-connection-provider"">
      <connection-string>SQL-CONNECTION-STRING</connection-string>
      <schema>dbo</schema>
    </options>
    <options name=""my-options"">
      <option ref=""sql-connection""/>
    </options>
  </providers>";

            var document = new XmlDocument();

            document.LoadXml(xml_config_file);
            var xml_element = (XmlElement)document.FirstChild;

            Assert.Throws <ConfigurationException> (
                () => ProvidersNode.Parse(xml_element,
                                          Path.AbsoluteForApplication(string.Empty)));
        }
コード例 #4
0
ファイル: CommonNodeParser.cs プロジェクト: ddd-cqrs-es/must
        /// <summary>
        /// Creates a instance of the <see cref="CommonNode"/> object by parsing
        /// the given <paramref name="element"/> Xml element.
        /// </summary>
        /// <param name="element">
        /// A  <see cref="XmlElement"/> that contains the common configuration
        /// data.
        /// </param>
        /// <param name="base_directory">
        /// The path to the directory to use as the base directory when resolving
        /// relative paths.
        /// </param>
        /// <returns>
        /// A <see cref="CommonNode"/> containing the common configuration data.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="element"/> is a <c>null</c> reference.
        /// </exception>
        /// <exception cref="ConfigurationException">
        /// The <paramref name="element"/> contains invalid configuration data.
        /// </exception>
        /// <remarks>
        /// The <see cref="base_directory"/> is used to resolve the relative paths.
        /// </remarks>
        public static CommonNode Parse(XmlElement element, string base_directory)
        {
            CommonNode common = new CommonNode();

            foreach (XmlNode node in element)
            {
                if (node.NodeType == XmlNodeType.Element)
                {
                    string name = node.Name;
                    if (StringsAreEquals(name, Strings.kRepositoryNodeName))
                    {
                        common.repositories_ = RepositoriesNode.Parse(element,
                                                                      base_directory);
                    }
                    else if (StringsAreEquals(name, Strings.kProvidersNodeName))
                    {
                        common.providers_ = ProvidersNode.Parse(element, base_directory);
                    }
                }
            }
            return(common);
        }