From 6fffc8b45e7786365bdd830f061ab7616c6beaa0 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 16 Feb 2016 15:07:42 +0100 Subject: [PATCH] U4-7577 Remove dependency on UmbracoContext in CreateServiceContext / RequestLifespanMessagesFactory --- src/Umbraco.Web/IHttpContextAccessor.cs | 15 +++++++++++++++ src/Umbraco.Web/IUmbracoContextAccessor.cs | 5 ++++- src/Umbraco.Web/RequestLifespanMessagesFactory.cs | 14 +++++++------- src/Umbraco.Web/SingletonHttpContextAccessor.cs | 12 ++++++++++++ src/Umbraco.Web/Umbraco.Web.csproj | 2 ++ src/Umbraco.Web/WebBootManager.cs | 2 +- 6 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 src/Umbraco.Web/IHttpContextAccessor.cs create mode 100644 src/Umbraco.Web/SingletonHttpContextAccessor.cs 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 2c9542fe2d..9e0643d36e 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -318,6 +318,7 @@ + @@ -363,6 +364,7 @@ + diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index c4252223f3..bccb93af5f 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),