using System; using System.Data.SQLite; using System.Diagnostics; using System.Reflection; using System.Threading; using System.Web; using System.Web.Mvc; using System.Web.Routing; using Ninject; using Ninject.Web.Mvc; using NLog; using NzbDrone.Core; using NzbDrone.Core.Instrumentation; using SubSonic.Repository; namespace NzbDrone.Web { public class MvcApplication : NinjectHttpApplication { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{*robotstxt}", new { robotstxt = @"(.*/)?robots.txt(/.*)?" }); routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Series", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } protected override void OnApplicationStarted() { base.OnApplicationStarted(); LogConfiguration.Setup(); Logger.Info("NZBDrone Starting up."); CentralDispatch.DedicateToHost(); RegisterRoutes(RouteTable.Routes); //base.OnApplicationStarted(); AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); //RegisterRoutes(RouteTable.Routes); } protected override IKernel CreateKernel() { var kernel = CentralDispatch.NinjectKernel; // kernel.Bind().ToConstant(kernel.Get("LogDb")); kernel.Load(Assembly.GetExecutingAssembly()); return kernel; } public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } // ReSharper disable InconsistentNaming protected void Application_Error(object sender, EventArgs e) { var lastError = Server.GetLastError(); if (lastError is HttpException) { Logger.WarnException(String.Format("{0}. URL[{1}]", lastError.Message, Request.Path), lastError); if (Request.Path.EndsWith(".aspx", StringComparison.InvariantCultureIgnoreCase)) { Response.Redirect(Request.ApplicationPath); } return; } Logger.FatalException(lastError.Message, lastError); if (lastError is SQLiteException) { Logger.Warn("Restarting application"); HttpRuntime.UnloadAppDomain(); } } protected void Application_BeginRequest() { Thread.CurrentThread.Name = "UI"; } } }