From d252d5751a68ff13a5cc9740c384113a3d8724a5 Mon Sep 17 00:00:00 2001 From: Andy Doyle Date: Wed, 11 Jul 2018 16:42:01 +0100 Subject: [PATCH 1/2] Extension method to allow converting ConfigurationSection.Configuration to an editable Configuration to allow overriding settings at runtime --- .../ConfigurationExtensions.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/Bugsnag.ConfigurationSection/ConfigurationExtensions.cs diff --git a/src/Bugsnag.ConfigurationSection/ConfigurationExtensions.cs b/src/Bugsnag.ConfigurationSection/ConfigurationExtensions.cs new file mode 100644 index 0000000..1e68968 --- /dev/null +++ b/src/Bugsnag.ConfigurationSection/ConfigurationExtensions.cs @@ -0,0 +1,29 @@ +namespace Bugsnag.ConfigurationSection +{ + public static class ConfigurationExtensions + { + public static Bugsnag.Configuration ToWritableCopy(this Configuration config) + { + return new Bugsnag.Configuration() + { + ApiKey = config.ApiKey, + AppType = config.AppType, + AppVersion = config.AppVersion, + AutoCaptureSessions = config.AutoCaptureSessions, + AutoNotify = config.AutoNotify, + Endpoint = config.Endpoint, + GlobalMetadata = config.GlobalMetadata, + IgnoreClasses = config.IgnoreClasses, + MaximumBreadcrumbs = config.MaximumBreadcrumbs, + MetadataFilters = config.MetadataFilters, + NotifyReleaseStages = config.NotifyReleaseStages, + ProjectNamespaces = config.ProjectNamespaces, + ProjectRoots = config.ProjectRoots, + Proxy = config.Proxy, + ReleaseStage = config.ReleaseStage, + SessionEndpoint = config.SessionEndpoint, + SessionTrackingInterval = config.SessionTrackingInterval + }; + } + } +} From 47fe62d68bf97415476eb26468f58d246f885b42 Mon Sep 17 00:00:00 2001 From: Andy Doyle Date: Wed, 11 Jul 2018 17:21:43 +0100 Subject: [PATCH 2/2] Allow configuration to be overridden at runtime and reused for the lifetime of the app --- src/Bugsnag.AspNet/Client.cs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Bugsnag.AspNet/Client.cs b/src/Bugsnag.AspNet/Client.cs index 36f883e..c43d75f 100644 --- a/src/Bugsnag.AspNet/Client.cs +++ b/src/Bugsnag.AspNet/Client.cs @@ -1,4 +1,5 @@ using System.Web; +using Bugsnag.ConfigurationSection; namespace Bugsnag.AspNet { @@ -27,7 +28,7 @@ public static IClient Current { // this is the first time a client has been requested for this // request scope, so create one and attach it to the request - var requestScopedClient = new Bugsnag.Client(ConfigurationSection.Configuration.Settings); + var requestScopedClient = new Bugsnag.Client(RuntimeConfiguration); HttpContext.Current.Items[HttpContextItemsKey] = requestScopedClient; return requestScopedClient; } @@ -39,7 +40,7 @@ public static IClient Current { if (_globalClient == null) { - _globalClient = new Bugsnag.Client(ConfigurationSection.Configuration.Settings); + _globalClient = new Bugsnag.Client(RuntimeConfiguration); } } @@ -47,5 +48,23 @@ public static IClient Current } } } + + private static Configuration _runtimeConfiguration; + public static Configuration RuntimeConfiguration + { + get + { + if (_runtimeConfiguration == null) + { + _runtimeConfiguration = ConfigurationSection.Configuration.Settings.ToWritableCopy(); + } + + return _runtimeConfiguration; + } + set + { + _runtimeConfiguration = value; + } + } } }