diff --git a/CHANGELOG.md b/CHANGELOG.md index ca35adb..1d31bcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ Changelog ## Unreleased +* Add additional method of specifying ignore classes to allow for providing fully qualified assembly names in config files. + | [martin308](https://github.com/martin308) + | [#109](https://github.com/bugsnag/bugsnag-dotnet/pull/109) + * Include Configuration package with WebApi | [martin308](https://github.com/martin308) | [#105](https://github.com/bugsnag/bugsnag-dotnet/pull/105) diff --git a/src/Bugsnag.ConfigurationSection/Configuration.cs b/src/Bugsnag.ConfigurationSection/Configuration.cs index 9ce0d20..1d94ffc 100644 --- a/src/Bugsnag.ConfigurationSection/Configuration.cs +++ b/src/Bugsnag.ConfigurationSection/Configuration.cs @@ -207,7 +207,7 @@ public string[] ProjectNamespaces private const string ignoreClasses = "ignoreClasses"; - [ConfigurationProperty("ignoreClasses", IsRequired = false)] + [ConfigurationProperty(ignoreClasses, IsRequired = false)] private string InternalIgnoreClasses { get @@ -229,18 +229,71 @@ public Type[] IgnoreClasses { get { - if (_ignoreClasses == null && InternalIgnoreClasses != null) + if (_ignoreClasses == null) { - _ignoreClasses = InternalIgnoreClasses - .Split(',') - .Select(c => Type.GetType(c)) - .Where(t => t != null).ToArray(); + _ignoreClasses = CompleteIgnoreClasses + .Select(t => Type.GetType(t)) + .Where(c => c != null) + .ToArray(); } return _ignoreClasses; } } + private IEnumerable CompleteIgnoreClasses + { + get + { + if (InternalIgnoreClasses != null) + { + foreach (var item in InternalIgnoreClasses.Split(',')) + { + yield return item; + } + } + + if (InternalExtendedIgnoreClasses.Count > 0) + { + foreach (ExtendedIgnoreClass item in InternalExtendedIgnoreClasses) + { + yield return item.Name; + } + } + } + } + + private const string extendedIgnoreClasses = "assemblyQualifiedIgnoreClasses"; + + [ConfigurationProperty(extendedIgnoreClasses, IsRequired = false)] + private ExtendedIgnoreClassCollection InternalExtendedIgnoreClasses + { + get + { + return (ExtendedIgnoreClassCollection)this[extendedIgnoreClasses]; + } + } + + [ConfigurationCollection(typeof(ExtendedIgnoreClass), AddItemName = "class", CollectionType = ConfigurationElementCollectionType.BasicMap)] + class ExtendedIgnoreClassCollection : ConfigurationElementCollection + { + protected override ConfigurationElement CreateNewElement() + { + return new ExtendedIgnoreClass(); + } + + protected override object GetElementKey(ConfigurationElement element) + { + return ((ExtendedIgnoreClass)element).Name; + } + } + + class ExtendedIgnoreClass : ConfigurationElement + { + [ConfigurationProperty("name", IsRequired = true)] + public string Name => (string)this["name"]; + } + private const string metadataFilters = "metadataFilters"; [ConfigurationProperty(metadataFilters, IsRequired = false)] diff --git a/tests/Bugsnag.ConfigurationSection.Tests/Complete.config b/tests/Bugsnag.ConfigurationSection.Tests/Complete.config index a0b1dae..7227728 100644 --- a/tests/Bugsnag.ConfigurationSection.Tests/Complete.config +++ b/tests/Bugsnag.ConfigurationSection.Tests/Complete.config @@ -21,6 +21,9 @@ proxyPassword="password" sessionsEndpoint="https://www.bugsnag.com" maximumBreadcrumbs="30"> + + + diff --git a/tests/Bugsnag.ConfigurationSection.Tests/CompleteTests.cs b/tests/Bugsnag.ConfigurationSection.Tests/CompleteTests.cs index df77c53..ed318f9 100644 --- a/tests/Bugsnag.ConfigurationSection.Tests/CompleteTests.cs +++ b/tests/Bugsnag.ConfigurationSection.Tests/CompleteTests.cs @@ -70,7 +70,7 @@ public void ProjectNamespacesIsSet() [Fact] public void IgnoreClassesIsSet() { - Assert.Equal(new[] { typeof(NotImplementedException), typeof(DllNotFoundException) }, TestConfiguration.IgnoreClasses); + Assert.Equal(new[] { typeof(NotImplementedException), typeof(DllNotFoundException), typeof(FactAttribute) }, TestConfiguration.IgnoreClasses); } [Fact] diff --git a/tests/Bugsnag.ConfigurationSection.Tests/DefaultTests.cs b/tests/Bugsnag.ConfigurationSection.Tests/DefaultTests.cs index b43309e..6715a38 100644 --- a/tests/Bugsnag.ConfigurationSection.Tests/DefaultTests.cs +++ b/tests/Bugsnag.ConfigurationSection.Tests/DefaultTests.cs @@ -62,9 +62,9 @@ public void ProjectNamespacesIsNull() } [Fact] - public void IgnoreClassesIsNull() + public void IgnoreClassesIsEmpty() { - Assert.Null(TestConfiguration.IgnoreClasses); + Assert.Empty(TestConfiguration.IgnoreClasses); } [Fact]