Skip to content

Commit 9eaa9c9

Browse files
committed
Handle disposed service provider when resolving CommunicationLogger (#68)
1 parent 3fe4476 commit 9eaa9c9

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

ManagedCode.Communication.Tests/Extensions/ServiceCollectionExtensionsTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,23 @@ public void ConfigureCommunication_WithLoggerFactory_ConfiguresLoggerAndReturns(
5454
var logger = CommunicationLogger.GetLogger();
5555
logger.ShouldNotBeNull();
5656
}
57+
58+
[Fact]
59+
public void GetLogger_WithDisposedServiceProvider_ShouldFallbackGracefully()
60+
{
61+
// Arrange
62+
var services = new ServiceCollection();
63+
services.AddLogging();
64+
using (var serviceProvider = services.BuildServiceProvider())
65+
{
66+
CommunicationLogger.Configure(serviceProvider);
67+
}
68+
69+
// Act & Assert
70+
Should.NotThrow(() =>
71+
{
72+
var logger = CommunicationLogger.GetLogger();
73+
logger.ShouldNotBeNull();
74+
});
75+
}
5776
}

ManagedCode.Communication/Logging/CommunicationLogger.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,30 @@ public static ILogger<Result> GetLogger()
3434

3535
private static ILogger<Result> CreateLogger()
3636
{
37-
var logger = _serviceProvider?.GetService<ILogger<Result>>();
38-
if (logger != null)
39-
return logger;
37+
if (_serviceProvider != null)
38+
{
39+
try
40+
{
41+
var logger = _serviceProvider.GetService<ILogger<Result>>();
42+
if (logger != null)
43+
{
44+
return logger;
45+
}
46+
}
47+
catch (ObjectDisposedException)
48+
{
49+
_serviceProvider = null;
50+
}
51+
}
4052

4153
if (_fallbackLoggerFactory != null)
4254
{
43-
return new Logger<Result>(_fallbackLoggerFactory);
55+
return _fallbackLoggerFactory.CreateLogger<Result>();
4456
}
4557

46-
_lastResortLoggerFactory ??= LoggerFactory.Create(builder =>
58+
_lastResortLoggerFactory ??= LoggerFactory.Create(builder =>
4759
builder.SetMinimumLevel(LogLevel.Warning));
48-
49-
return new Logger<Result>(_lastResortLoggerFactory);
60+
61+
return _lastResortLoggerFactory.CreateLogger<Result>();
5062
}
5163
}

0 commit comments

Comments
 (0)