fix for SPRNET-1331

This commit is contained in:
eeichinger
2011-01-07 19:40:38 +00:00
parent df43bd8640
commit d0135e2a73
5 changed files with 94 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -70,7 +70,7 @@ namespace Spring.Context.Support
/// </summary>
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;
}
}
}

View File

@@ -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 =
@"<context type='Spring.Context.Support.XmlApplicationContext, Spring.Core'>
<resource uri='assembly://Spring.Web.Tests/Spring.Context.Support/WebContextHandlerTests.xml'/>
</context>";
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;
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd"
>
<!-- deliberately empty -->
</objects>

View File

@@ -99,6 +99,7 @@
<Compile Include="Context\Support\HttpApplicationConfigurerTests.cs" />
<Compile Include="Context\Support\WebApplicationContextArgsTests.cs" />
<Compile Include="Context\Support\WebApplicationContextTests.cs" />
<Compile Include="Context\Support\WebContextHandlerTests.cs" />
<Compile Include="Core\IO\WebResourceTests.cs" />
<Compile Include="Data\Spring\Objects\Factory\Support\TestForm.aspx.cs">
<DependentUpon>TestForm.aspx</DependentUpon>
@@ -164,6 +165,7 @@
<ItemGroup>
<EmbeddedResource Include="Context\Support\HttpApplicationConfigurerTests.xml" />
<EmbeddedResource Include="Context\Support\HttpApplicationConfigurerMergablePropertiesTests.xml" />
<EmbeddedResource Include="Context\Support\WebContextHandlerTests.xml" />
<Content Include="Data\Spring\Context\Support\WebApplicationContextTests\Dummy.aspx" />
<Content Include="Data\Spring\Objects\Factory\Support\TestForm.aspx" />
<Content Include="Data\Spring\Web\Support\LocalResourceManagerTests\WithoutResources.aspx" />