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),