using System; using System.IO; using Nancy; using Nancy.Bootstrapper; using Nancy.Bootstrappers.StructureMap; using Nancy.Json; using Newtonsoft.Json; using Sony.Filtr.ErrorLogging; using StructureMap; namespace Sony.Filtr.API.Nancy.Config { public class CustomBootstrapper : StructureMapNancyBootstrapper { protected override IContainer GetApplicationContainer() { var container = new Sony.Filtr.Bootstrap.Bootstrapper().InitializeAsync().Result; container.Configure(config => config.For().Use()); return container; } protected override void ApplicationStartup(IContainer container, IPipelines pipelines) { JsonSettings.MaxJsonLength = Int32.MaxValue; InitializeErrorLogging(container, pipelines); base.ApplicationStartup(container, pipelines); } private static void InitializeErrorLogging(IContainer container, IPipelines pipelines) { var errorLoggingManager = container.GetInstance(); pipelines.OnError.AddItemToEndOfPipeline((context, exception) => { var statusException = exception as NancyStatusException; if (statusException != null) { context.Response = new Response() {StatusCode = statusException.StatusCode}; return null; } errorLoggingManager.LogError(exception); return null; }); } } }