fix for SPRNET-1331
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user