Skip to content

Commit fe1c035

Browse files
committed
Fixed #6 ExceptionlessClient.Startup overrides ISubmissionClient previously set by user
1 parent 18b7bcf commit fe1c035

File tree

4 files changed

+48
-3
lines changed

4 files changed

+48
-3
lines changed

Source/Extras/Extensions/ExceptionlessClientExtensions.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ public static class ExceptionlessClientExtensions {
1616
/// <param name="client">The ExceptionlessClient.</param>
1717
/// <param name="appDomain">The AppDomain to register the exception handlers on.</param>
1818
public static void Startup(this ExceptionlessClient client, AppDomain appDomain = null) {
19-
client.Configuration.Resolver.Register<ISubmissionClient, SubmissionClient>();
20-
client.Configuration.Resolver.Register<IEnvironmentInfoCollector, EnvironmentInfoCollector>();
19+
if (client.Configuration.Resolver.HasDefaultRegistration<ISubmissionClient, DefaultSubmissionClient>())
20+
client.Configuration.Resolver.Register<ISubmissionClient, SubmissionClient>();
21+
22+
if (client.Configuration.Resolver.HasDefaultRegistration<IEnvironmentInfoCollector, DefaultEnvironmentInfoCollector>())
23+
client.Configuration.Resolver.Register<IEnvironmentInfoCollector, EnvironmentInfoCollector>();
24+
2125
client.Configuration.ReadAllConfig();
2226
client.Configuration.UseErrorPlugin();
2327
client.Configuration.UseTraceLogEntriesPlugin();

Source/Shared/Dependency/DependencyResolverExtensions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ public static bool HasRegistration<TService>(this IDependencyResolver resolver)
1515
return resolver.Resolve(typeof(TService)) != null;
1616
}
1717

18+
public static bool HasDefaultRegistration<TService, TDefaultImplementation>(this IDependencyResolver resolver) where TService : class where TDefaultImplementation : TService {
19+
if (resolver == null)
20+
return false;
21+
22+
var instance = resolver.Resolve(typeof(TService));
23+
return instance is TDefaultImplementation;
24+
}
25+
1826
public static object Resolve(this IDependencyResolver resolver, Type type) {
1927
if (resolver == null)
2028
throw new ArgumentNullException("resolver");

Source/Shared/Services/DefaultEnvironmentInfoCollector.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using Exceptionless.Models.Data;
33

44
namespace Exceptionless.Services {
5-
internal class DefaultEnvironmentInfoCollector : IEnvironmentInfoCollector {
5+
public class DefaultEnvironmentInfoCollector : IEnvironmentInfoCollector {
66
private static EnvironmentInfo _environmentInfo;
77

88
public EnvironmentInfo GetEnvironmentInfo() {

Source/Tests/ExceptionlessClientTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
using System;
22
using System.Collections.Generic;
3+
using Exceptionless.Dependency;
34
using Exceptionless.Models;
5+
using Exceptionless.Models.Data;
46
using Exceptionless.Plugins;
7+
using Exceptionless.Submission;
58
using Xunit;
69

710
namespace Exceptionless.Tests {
@@ -54,6 +57,22 @@ public void CanFireOnSubmittingEvent() {
5457
Assert.Equal(2, list.Count);
5558
}
5659

60+
[Fact]
61+
public void CanCallStartupWithCustomSubmissionClient() {
62+
var client = CreateClient();
63+
Assert.True(client.Configuration.Resolver.HasRegistration<ISubmissionClient>());
64+
Assert.True(client.Configuration.Resolver.HasDefaultRegistration<ISubmissionClient, DefaultSubmissionClient>());
65+
66+
client.Configuration.Resolver.Register<ISubmissionClient, MySubmissionClient>();
67+
Assert.False(client.Configuration.Resolver.HasDefaultRegistration<ISubmissionClient, DefaultSubmissionClient>());
68+
Assert.True(client.Configuration.Resolver.Resolve<ISubmissionClient>() is MySubmissionClient);
69+
70+
client.Startup();
71+
Assert.True(client.Configuration.Resolver.Resolve<ISubmissionClient>() is MySubmissionClient);
72+
Assert.False(client.Configuration.Resolver.HasDefaultRegistration<ISubmissionClient, DefaultSubmissionClient>());
73+
client.Shutdown();
74+
}
75+
5776
[Fact (Skip = "This test shows off throwing a stack overflow exception: Issue #26")]
5877
public void WillThrowStackOverflowExceptionDuringOnSubmitting() {
5978
var client = CreateClient();
@@ -155,5 +174,19 @@ public void WillThrowStackOverflowExceptionDuringOnSubmitting() {
155174
private class Person {
156175
public string Name { get; set; }
157176
}
177+
178+
public class MySubmissionClient : ISubmissionClient {
179+
public SubmissionResponse PostEvents(IEnumerable<Event> events, ExceptionlessConfiguration config, IJsonSerializer serializer) {
180+
throw new NotImplementedException();
181+
}
182+
183+
public SubmissionResponse PostUserDescription(string referenceId, UserDescription description, ExceptionlessConfiguration config, IJsonSerializer serializer) {
184+
throw new NotImplementedException();
185+
}
186+
187+
public SettingsResponse GetSettings(ExceptionlessConfiguration config, IJsonSerializer serializer) {
188+
throw new NotImplementedException();
189+
}
190+
}
158191
}
159192
}

0 commit comments

Comments
 (0)