diff --git a/Moq.AutoMock.Tests/DescribeGetMock.cs b/Moq.AutoMock.Tests/DescribeGetMock.cs index 2f29f970..177aa831 100644 --- a/Moq.AutoMock.Tests/DescribeGetMock.cs +++ b/Moq.AutoMock.Tests/DescribeGetMock.cs @@ -65,5 +65,22 @@ public void It_allows_getting_mocked_object_when_overriden() Assert.IsNotNull(@protected); Assert.IsInstanceOfType(@protected, typeof(ProtectedConstructor1)); } + + [TestMethod] + public void It_gets_mocked_object_via_iserviceprovider() + { + IServiceProvider mocker = new AutoMocker(); + var service = mocker.GetService(typeof(Empty)); + Assert.IsNotNull(service); + Assert.IsInstanceOfType(service, typeof(Empty)); + } + + [TestMethod] + public void It_returns_null_for_unmockable_object_via_iserviceprovider() + { + IServiceProvider mocker = new AutoMocker(); + var service = mocker.GetService(typeof(string)); + Assert.IsNull(service); + } } } \ No newline at end of file diff --git a/Moq.AutoMock/AutoMocker.cs b/Moq.AutoMock/AutoMocker.cs index 3923e257..65850f42 100644 --- a/Moq.AutoMock/AutoMocker.cs +++ b/Moq.AutoMock/AutoMocker.cs @@ -18,7 +18,7 @@ namespace Moq.AutoMock /// /// An auto-mocking IoC container that generates mock objects using Moq. /// - public partial class AutoMocker + public partial class AutoMocker : IServiceProvider { /// /// Initializes an instance of AutoMockers. @@ -441,6 +441,14 @@ internal bool TryGet( return false; } + /// + object? IServiceProvider.GetService(Type serviceType) + { + return TryGet(serviceType, new ObjectGraphContext(false), out IInstance? service) + ? service.Value + : null; + } + #endregion Get #region GetMock