using System.Web;
using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Runtime;
using Umbraco.Web.Logging;
namespace Umbraco.Web.Runtime
{
///
/// Represents the Web Umbraco runtime.
///
/// On top of CoreRuntime, handles all of the web-related runtime aspects of Umbraco.
public class WebRuntime : CoreRuntime
{
private readonly UmbracoApplicationBase _umbracoApplication;
private IProfiler _webProfiler;
///
/// Initializes a new instance of the class.
///
///
public WebRuntime(UmbracoApplicationBase umbracoApplication)
{
_umbracoApplication = umbracoApplication;
}
///
public override IFactory Boot(IRegister register)
{
// create and start asap to profile boot
var debug = GlobalSettings.DebugMode;
if (debug)
{
_webProfiler = new WebProfiler();
_webProfiler.Start();
}
else
{
// should let it be null, that's how MiniProfiler is meant to work,
// but our own IProfiler expects an instance so let's get one
_webProfiler = new VoidProfiler();
}
var factory = base.Boot(register);
// now (and only now) is the time to switch over to perWebRequest scopes.
// up until that point we may not have a request, and scoped services would
// fail to resolve - but we run Initialize within a factory scope - and then,
// here, we switch the factory to bind scopes to requests
factory.EnablePerWebRequestScope();
return factory;
}
#region Getters
protected override IProfiler GetProfiler() => _webProfiler;
protected override AppCaches GetAppCaches() => new AppCaches(
// we need to have the dep clone runtime cache provider to ensure
// all entities are cached properly (cloned in and cloned out)
new DeepCloneAppCache(new WebCachingAppCache(HttpRuntime.Cache)),
// we need request based cache when running in web-based context
new HttpRequestAppCache(),
new IsolatedCaches(type =>
// we need to have the dep clone runtime cache provider to ensure
// all entities are cached properly (cloned in and cloned out)
new DeepCloneAppCache(new ObjectCacheAppCache())));
#endregion
}
}