From: <fli...@us...> - 2007-05-02 01:32:02
|
Revision: 47 http://structuremap.svn.sourceforge.net/structuremap/?rev=47&view=rev Author: flimflan Date: 2007-05-01 18:32:00 -0700 (Tue, 01 May 2007) Log Message: ----------- The configuration section handler no longer attempts to merge the configuration hiearchy when loading from app.config. It instead returns the configuration from all levels of the hierarchy, and leaves it up to the configuration parsers to do the merging. The full power of this will be realized when the configuration parsers allow you to override settings for plugins that have already been configured. Modified Paths: -------------- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs Modified: trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs =================================================================== --- trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap/Configuration/StructureMapConfigurationSection.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Configuration; using System.Xml; @@ -7,25 +8,23 @@ { public object Create(object parent, object configContext, XmlNode section) { - XmlNode parentNode = parent as XmlNode; - if (parentNode == null) return section; - // Might need to make this more intelligent, to merge nodes that override eachother - foreach (XmlNode childNode in section.ChildNodes) + IList<XmlNode> allNodes = parent as IList<XmlNode>; + if (allNodes == null) { - XmlNode importedNode = parentNode.OwnerDocument.ImportNode(childNode, true); - parentNode.AppendChild(importedNode); + allNodes = new List<XmlNode>(); } - return parentNode; + allNodes.Add(section); + return allNodes; } - public static XmlNode GetStructureMapConfiguration() + public static IList<XmlNode> GetStructureMapConfiguration() { - XmlNode node = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP) as XmlNode; - if (node == null) + IList<XmlNode> nodes = ConfigurationSettings.GetConfig(XmlConstants.STRUCTUREMAP) as IList<XmlNode>; + if (nodes == null) { throw new StructureMapException(105, XmlConstants.STRUCTUREMAP); } - return node; + return nodes; } } } \ No newline at end of file Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -80,8 +80,12 @@ { if (_pullConfigurationFromAppConfig) { - _collection.IncludeNode( - delegate() { return StructureMapConfigurationSection.GetStructureMapConfiguration(); }); + IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration(); + foreach(XmlNode appConfigNode in appConfigNodes) + { + _collection.IncludeNode( + delegate() { return appConfigNode; }); + } } ConfigurationParser[] parsers = _collection.GetParsers(); Modified: trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-05-01 02:31:55 UTC (rev 46) +++ trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs 2007-05-02 01:32:00 UTC (rev 47) @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Xml; using NUnit.Framework; @@ -90,20 +91,22 @@ } [Test] - public void AppConfigShouldIncludeSettingsFromParentConfig() + public void SettingsFromAllParentConfigFilesShouldBeIncluded() { StructureMapConfigurationSection configurationSection = new StructureMapConfigurationSection(); XmlNode fromMachineConfig = createNodeFromText(@"<StructureMap><Assembly Name=""SomeAssembly""/></StructureMap>"); XmlNode fromWebConfig = createNodeFromText(@"<StructureMap><Assembly Name=""AnotherAssembly""/></StructureMap>"); - XmlNode effectiveConfig = configurationSection.Create(fromMachineConfig, null, fromWebConfig) as XmlNode; + IList<XmlNode> parentNodes = new List<XmlNode>(); + parentNodes.Add(fromMachineConfig); - Assert.IsNotNull(effectiveConfig, "A configuration node should have been returned."); - Assert.AreEqual(2, effectiveConfig.ChildNodes.Count, "Both Assembly entries should have been returned."); - Assert.IsTrue(hasAttributeValue("Name", "SomeAssembly", effectiveConfig.ChildNodes[0]), "The parent Assembly entry should have been returned first."); - Assert.IsTrue(hasAttributeValue("Name", "AnotherAssembly", effectiveConfig.ChildNodes[1]), "The child Assembly entry should have been returned second."); + IList<XmlNode> effectiveConfig = configurationSection.Create(parentNodes, null, fromWebConfig) as IList<XmlNode>; + Assert.IsNotNull(effectiveConfig, "A list of configuration nodes should have been returned."); + Assert.AreEqual(2, effectiveConfig.Count, "Both configurations should have been returned."); + Assert.AreEqual(fromMachineConfig, effectiveConfig[0]); + Assert.AreEqual(fromWebConfig, effectiveConfig[1]); } private static XmlNode createNodeFromText(string outerXml) @@ -112,13 +115,6 @@ document.LoadXml(outerXml); return document.DocumentElement; } - - private static bool hasAttributeValue(string attributeName, string attributeValue, XmlNode node) - { - XmlAttribute namedAttribute = node.Attributes[attributeName]; - if (namedAttribute == null) return false; - return namedAttribute.Value == attributeValue; - } } public interface ISomething This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |