|
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.
|