diff --git a/src/Umbraco.Web/IHttpContextAccessor.cs b/src/Umbraco.Web/IHttpContextAccessor.cs
new file mode 100644
index 0000000000..068783725a
--- /dev/null
+++ b/src/Umbraco.Web/IHttpContextAccessor.cs
@@ -0,0 +1,15 @@
+using System.Web;
+
+namespace Umbraco.Web
+{
+ ///
+ /// Used to retrieve the HttpContext
+ ///
+ ///
+ /// NOTE: This has a singleton lifespan
+ ///
+ public interface IHttpContextAccessor
+ {
+ HttpContextBase Value { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/IUmbracoContextAccessor.cs b/src/Umbraco.Web/IUmbracoContextAccessor.cs
index 997b25145b..8111606602 100644
--- a/src/Umbraco.Web/IUmbracoContextAccessor.cs
+++ b/src/Umbraco.Web/IUmbracoContextAccessor.cs
@@ -2,7 +2,10 @@ namespace Umbraco.Web
{
///
/// Used to retrieve the Umbraco context
- ///
+ ///
+ ///
+ /// NOTE: This has a singleton lifespan
+ ///
public interface IUmbracoContextAccessor
{
UmbracoContext Value { get; }
diff --git a/src/Umbraco.Web/RequestLifespanMessagesFactory.cs b/src/Umbraco.Web/RequestLifespanMessagesFactory.cs
index ec3a8b2442..26ac3bd5df 100644
--- a/src/Umbraco.Web/RequestLifespanMessagesFactory.cs
+++ b/src/Umbraco.Web/RequestLifespanMessagesFactory.cs
@@ -8,21 +8,21 @@ namespace Umbraco.Web
///
internal class RequestLifespanMessagesFactory : IEventMessagesFactory
{
- private readonly IUmbracoContextAccessor _ctxAccessor;
+ private readonly IHttpContextAccessor _httpAccessor;
- public RequestLifespanMessagesFactory(IUmbracoContextAccessor ctxAccessor)
+ public RequestLifespanMessagesFactory(IHttpContextAccessor httpAccessor)
{
- if (ctxAccessor == null) throw new ArgumentNullException("ctxAccessor");
- _ctxAccessor = ctxAccessor;
+ if (httpAccessor == null) throw new ArgumentNullException("httpAccessor");
+ _httpAccessor = httpAccessor;
}
public EventMessages Get()
{
- if (_ctxAccessor.Value.HttpContext.Items[typeof (RequestLifespanMessagesFactory).Name] == null)
+ if (_httpAccessor.Value.Items[typeof (RequestLifespanMessagesFactory).Name] == null)
{
- _ctxAccessor.Value.HttpContext.Items[typeof(RequestLifespanMessagesFactory).Name] = new EventMessages();
+ _httpAccessor.Value.Items[typeof(RequestLifespanMessagesFactory).Name] = new EventMessages();
}
- return (EventMessages)_ctxAccessor.Value.HttpContext.Items[typeof (RequestLifespanMessagesFactory).Name];
+ return (EventMessages)_httpAccessor.Value.Items[typeof (RequestLifespanMessagesFactory).Name];
}
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Web/SingletonHttpContextAccessor.cs b/src/Umbraco.Web/SingletonHttpContextAccessor.cs
new file mode 100644
index 0000000000..cdeafa48e1
--- /dev/null
+++ b/src/Umbraco.Web/SingletonHttpContextAccessor.cs
@@ -0,0 +1,12 @@
+using System.Web;
+
+namespace Umbraco.Web
+{
+ internal class SingletonHttpContextAccessor : IHttpContextAccessor
+ {
+ public HttpContextBase Value
+ {
+ get { return new HttpContextWrapper(HttpContext.Current); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index e12afc0a65..cb09ef97fd 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -318,6 +318,7 @@
+
@@ -365,6 +366,7 @@
+
diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs
index 42ef78d96e..8d8091cd57 100644
--- a/src/Umbraco.Web/WebBootManager.cs
+++ b/src/Umbraco.Web/WebBootManager.cs
@@ -89,7 +89,7 @@ namespace Umbraco.Web
protected override ServiceContext CreateServiceContext(DatabaseContext dbContext, IDatabaseFactory dbFactory)
{
//use a request based messaging factory
- var evtMsgs = new RequestLifespanMessagesFactory(new SingletonUmbracoContextAccessor());
+ var evtMsgs = new RequestLifespanMessagesFactory(new SingletonHttpContextAccessor());
return new ServiceContext(
new RepositoryFactory(ApplicationCache, ProfilingLogger.Logger, dbContext.SqlSyntax, UmbracoConfig.For.UmbracoSettings()),
new PetaPocoUnitOfWorkProvider(dbFactory),