Skip to content

Commit 8b5973c

Browse files
authored
Improve error handling for GetScriptHostServiceOrNull (#7691)
1 parent 405a25d commit 8b5973c

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/WebJobs.Script/Extensions/IServiceProviderExtensions.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,19 @@ public static TService GetScriptHostServiceOrNull<TService>(this IServiceProvide
2121
throw new ArgumentNullException(nameof(serviceProvider));
2222
}
2323

24-
var hostManager = serviceProvider.GetService<IScriptHostManager>();
25-
if (Utility.TryGetHostService(hostManager, out TService service))
24+
try
2625
{
27-
return service;
26+
var hostManager = serviceProvider.GetService<IScriptHostManager>();
27+
if (Utility.TryGetHostService(hostManager, out TService service))
28+
{
29+
return service;
30+
}
2831
}
32+
catch
33+
{
34+
// can get exceptions if the host is being disposed
35+
}
36+
2937
return null;
3038
}
3139
}

test/WebJobs.Script.Tests/Extensions/ServiceProviderExtensionsTests.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,14 @@ public void GetScriptHostServiceOrNull_NonScriptHost_ReturnsNull()
3636
var result = serviceProviderMock.Object.GetScriptHostServiceOrNull<ITestInterface>();
3737
Assert.Null(result);
3838
}
39+
40+
[Fact]
41+
public void GetScriptHostServiceOrNull_ContainerDisposed_ReturnsNull()
42+
{
43+
var serviceProviderMock = new Mock<IServiceProvider>(MockBehavior.Strict);
44+
serviceProviderMock.Setup(p => p.GetService(typeof(IScriptHostManager))).Throws(new ObjectDisposedException("test"));
45+
var result = serviceProviderMock.Object.GetScriptHostServiceOrNull<ITestInterface>();
46+
Assert.Null(result);
47+
}
3948
}
4049
}

0 commit comments

Comments
 (0)