diff --git a/src/Spring/Spring.Core/Context/Support/ContextHandler.cs b/src/Spring/Spring.Core/Context/Support/ContextHandler.cs
index 99a3701f..0c21fed1 100644
--- a/src/Spring/Spring.Core/Context/Support/ContextHandler.cs
+++ b/src/Spring/Spring.Core/Context/Support/ContextHandler.cs
@@ -288,7 +288,7 @@ namespace Spring.Context.Support
// finally create the context instance
context = InstantiateContext(parentContext, configContext, contextName, contextType, caseSensitive, resources);
// and register with global context registry
- if (AutoRegisterWithContextRegistry)
+ if (AutoRegisterWithContextRegistry && !ContextRegistry.IsContextRegistered(context.Name))
{
ContextRegistry.RegisterContext(context);
}
diff --git a/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs b/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs
index 3a696651..a899d031 100644
--- a/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs
+++ b/src/Spring/Spring.Web/Context/Support/WebContextHandler.cs
@@ -70,7 +70,7 @@ namespace Spring.Context.Support
///
protected override string GetContextName(object configContext, XmlElement contextElement)
{
- string contextName = ((HttpConfigurationContext) configContext).VirtualPath;
+ string contextName = GetVirtualPath(configContext);
// NET 2.0 returns "/" for root path
if (contextName == "/")
{
@@ -104,8 +104,6 @@ namespace Spring.Context.Support
string contextName, Type contextType,
bool caseSensitive, string[] resources)
{
- HttpConfigurationContext httpConfigurationContext = (HttpConfigurationContext) configContext;
-
// ASP.NET may scavenge it's configuration section cache if memory usage is too high.
// Thus a handler may be called more than once for the same context.
// Return registered context in this case.
@@ -122,7 +120,7 @@ namespace Spring.Context.Support
}
// for rewriting path during context instantiation
- string vpath = httpConfigurationContext.VirtualPath;
+ string vpath = GetVirtualPath(configContext);
if (!vpath.EndsWith("/")) vpath = vpath + "/";
using (new HttpContextSwitch(vpath))
{
@@ -130,5 +128,15 @@ namespace Spring.Context.Support
base.InstantiateContext(parent, configContext, contextName, contextType, caseSensitive, resources);
}
}
+
+ private String GetVirtualPath(Object configContext)
+ {
+ HttpConfigurationContext httpConfigurationContext = (HttpConfigurationContext)configContext;
+ if (httpConfigurationContext != null)
+ {
+ return httpConfigurationContext.VirtualPath;
+ }
+ return String.Empty;
+ }
}
}
\ No newline at end of file
diff --git a/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs
new file mode 100644
index 00000000..0c1b00a3
--- /dev/null
+++ b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.cs
@@ -0,0 +1,72 @@
+#region License
+
+/*
+ * Copyright © 2002-2010 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#endregion
+
+#region Imports
+
+using System;
+using System.IO;
+using System.Xml;
+using NUnit.Framework;
+using Spring.Util;
+
+#endregion
+
+
+
+namespace Spring.Context.Support
+{
+ public class WebContextHandlerTests
+ {
+ [SetUp]
+ public void SetUp()
+ {
+ ContextRegistry.Clear();
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ ContextRegistry.Clear();
+ }
+
+ [Test]
+ public void should_return_registered_context_with_ContextRegistry()
+ {
+ const string xmlData =
+ @"
+
+ ";
+ GenericApplicationContext expectedContext = new GenericApplicationContext(null, false, null);
+ ContextRegistry.RegisterContext(expectedContext);
+ WebContextHandler webContextHandler = new WebContextHandler();
+
+ Object actualContext = webContextHandler.Create(null, null, CreateConfigurationElement(xmlData));
+
+ Assert.AreSame(expectedContext, actualContext);
+ }
+
+ private XmlNode CreateConfigurationElement(string xmlData)
+ {
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.Load(new StringReader(xmlData));
+ return xmlDoc.DocumentElement;
+ }
+ }
+}
diff --git a/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml
new file mode 100644
index 00000000..e0045462
--- /dev/null
+++ b/test/Spring/Spring.Web.Tests/Context/Support/WebContextHandlerTests.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj
index bbdd070b..8412f186 100644
--- a/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj
+++ b/test/Spring/Spring.Web.Tests/Spring.Web.Tests.2010.csproj
@@ -99,6 +99,7 @@
+
TestForm.aspx
@@ -164,6 +165,7 @@
+