From: <fli...@us...> - 2008-10-23 23:02:19
|
Revision: 192 http://structuremap.svn.sourceforge.net/structuremap/?rev=192&view=rev Author: flimflan Date: 2008-10-23 23:02:07 +0000 (Thu, 23 Oct 2008) Log Message: ----------- - Container.Configure() can now load load configuration from an xml file - configuration file paths are now automatically resolved to an absolute path related to the appdomain (instead of defaulting to the working directory) - GetStructureMapConfigurationPath() has been moved to ConfigurationParserBuilder Modified Paths: -------------- trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs trunk/Source/StructureMap/Container.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserBuilderTester.cs trunk/Source/StructureMap.Testing/TestData/Config2.xml Modified: trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap/Configuration/ConfigurationParserBuilder.cs 2008-10-23 23:02:07 UTC (rev 192) @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Xml; @@ -103,29 +104,30 @@ IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration(); foreach (XmlNode appConfigNode in appConfigNodes) { - IncludeNode(appConfigNode, string.Empty); + IncludeNode(appConfigNode, String.Empty); } }).AndLogAnyErrors(); } } - private void addConfigurationFromExplicitlyAddedFiles(List<ConfigurationParser> list) + private void addConfigurationFromExplicitlyAddedFiles(ICollection<ConfigurationParser> list) { foreach (string filename in _otherFiles) { + var absolutePath = locateFileAsAbsolutePath(filename); _log.Try(() => { - ConfigurationParser parser = ConfigurationParser.FromFile(filename); - parser.Description = filename; + ConfigurationParser parser = ConfigurationParser.FromFile(absolutePath); + parser.Description = absolutePath; list.Add(parser); - }).AndReportErrorAs(160, filename); + }).AndReportErrorAs(160, absolutePath); } } - private void addConfigurationFromStructureMapConfig(List<ConfigurationParser> list) + private void addConfigurationFromStructureMapConfig(ICollection<ConfigurationParser> list) { // Pick up the configuration in the default StructureMap.config - string pathToStructureMapConfig = StructureMapConfiguration.GetStructureMapConfigurationPath(); + string pathToStructureMapConfig = GetStructureMapConfigurationPath(); if (shouldUseStructureMapConfigFileAt(pathToStructureMapConfig)) { _log.Try(() => @@ -147,10 +149,45 @@ public static ConfigurationParser[] GetParsers(XmlNode node, GraphLog log) { var builder = new ConfigurationParserBuilder(log); - builder.IncludeNode(node, string.Empty); + builder.IncludeNode(node, String.Empty); builder.IgnoreDefaultFile = true; return builder.GetParsers(); } + + /// <summary> + /// The name of the default configuration file. The value is always <c>StructurMap.config</c> + /// </summary> + public static readonly string DefaultConfigurationFilename = "StructureMap.config"; + + /// <summary> + /// Returns the absolute path to the StructureMap.config file + /// </summary> + /// <returns></returns> + public static string GetStructureMapConfigurationPath() + { + return locateFileAsAbsolutePath(DefaultConfigurationFilename); + } + + private static string locateFileAsAbsolutePath(string filename) + { + if (Path.IsPathRooted(filename)) return filename; + var basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; + var configPath = Path.Combine(basePath, filename); + + if (!File.Exists(configPath)) + { + configPath = Path.Combine(basePath, "bin"); + configPath = Path.Combine(configPath, filename); + + if (!File.Exists(configPath)) + { + configPath = Path.Combine(basePath, ".."); + configPath = Path.Combine(configPath, filename); + } + } + + return configPath; + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Container.cs =================================================================== --- trunk/Source/StructureMap/Container.cs 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap/Container.cs 2008-10-23 23:02:07 UTC (rev 192) @@ -350,7 +350,7 @@ var registry = new ConfigurationExpression(); configure(registry); - PluginGraph graph = registry.Build(); + PluginGraph graph = registry.BuildGraph(); graph.Log.AssertFailures(); Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-10-23 23:02:07 UTC (rev 192) @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Xml; using StructureMap.Configuration; using StructureMap.Configuration.DSL; @@ -16,7 +15,6 @@ )] public static class StructureMapConfiguration { - private const string CONFIG_FILE_NAME = "StructureMap.config"; private static GraphLog _log; private static ConfigurationParserBuilder _parserBuilder; private static List<Registry> _registries; @@ -93,24 +91,10 @@ /// Returns the path to the StructureMap.config file /// </summary> /// <returns></returns> + [Obsolete("Use ConfigurationParserBuilder.GetStructureMapConfigurationPath() instead.")] public static string GetStructureMapConfigurationPath() { - string basePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; - string configPath = Path.Combine(basePath, CONFIG_FILE_NAME); - - if (!File.Exists(configPath)) - { - configPath = Path.Combine(basePath, "bin"); - configPath = Path.Combine(configPath, CONFIG_FILE_NAME); - - if (!File.Exists(configPath)) - { - configPath = Path.Combine(basePath, ".."); - configPath = Path.Combine(configPath, CONFIG_FILE_NAME); - } - } - - return configPath; + return ConfigurationParserBuilder.GetStructureMapConfigurationPath(); } /// <summary> Modified: trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap.Testing/AlternativeConfigurationTester.cs 2008-10-23 23:02:07 UTC (rev 192) @@ -73,5 +73,15 @@ ObjectFactory.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Red"); } + + [Test] + public void Load_configuration_file_after_the_container_has_already_been_initialized() + { + var container = new Container(x => x.AddConfigurationFromXmlFile("Config1.xml")); + + container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Orange"); + container.Configure(x => x.AddConfigurationFromXmlFile("Config2.xml")); + container.GetInstance<IWidget>().ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Green"); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserBuilderTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserBuilderTester.cs 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap.Testing/Configuration/ConfigurationParserBuilderTester.cs 2008-10-23 23:02:07 UTC (rev 192) @@ -59,7 +59,7 @@ } [Test] - public void Do_NOT_Log_exception_100_if_StructureMap_config_is_required_and_missing() + public void Do_NOT_Log_exception_100_if_StructureMap_config_is_missing_but_not_required() { assertNoErrorIsLogged(100, delegate { @@ -169,10 +169,24 @@ builder.IncludeFile("GenericsTesting.xml"); ConfigurationParser[] parsers = builder.GetParsers(); - Assert.AreEqual("GenericsTesting.xml", parsers[0].Description); + Assert.AreEqual("GenericsTesting.xml", Path.GetFileName(parsers[0].Description)); } + [Test] + public void Always_resolve_files_to_an_absolute_path_before_giving_to_configuration_parser() + { + builder.UseAndEnforceExistenceOfDefaultFile = false; + builder.IgnoreDefaultFile = true; + DataMother.WriteDocument("GenericsTesting.xml"); + + builder.IncludeFile("GenericsTesting.xml"); + + ConfigurationParser[] parsers = builder.GetParsers(); + Assert.IsTrue(Path.IsPathRooted(parsers[0].Description)); + } + + [Test] public void SimpleDefaultConfigurationParser() { Modified: trunk/Source/StructureMap.Testing/TestData/Config2.xml =================================================================== --- trunk/Source/StructureMap.Testing/TestData/Config2.xml 2008-10-22 14:45:15 UTC (rev 191) +++ trunk/Source/StructureMap.Testing/TestData/Config2.xml 2008-10-23 23:02:07 UTC (rev 192) @@ -4,7 +4,7 @@ <PluginFamily Type="StructureMap.Testing.Widget.IWidget" Assembly="StructureMap.Testing.Widget" DefaultKey="Green"> <Instance Type="Color" Key="Green"> - <Property Name="Color" Value="Green" /> + <Property Name="color" Value="Green" /> </Instance> </PluginFamily> </StructureMap> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |