diff --git a/Moq.AutoMock.Tests/DescribeGetMock.cs b/Moq.AutoMock.Tests/DescribeGetMock.cs index 0c986724..4814b048 100644 --- a/Moq.AutoMock.Tests/DescribeGetMock.cs +++ b/Moq.AutoMock.Tests/DescribeGetMock.cs @@ -66,6 +66,16 @@ public void It_allows_getting_mocked_object_when_overriden() Assert.IsInstanceOfType(@protected, typeof(ProtectedConstructor1)); } + [TestMethod] + public void It_returns_same_mock_via_get() + { + var mocker = new AutoMocker(); + var service1 = mocker.Get(typeof(Empty)); + var service2 = mocker.Get(typeof(Empty)); + + Assert.AreEqual(service1, service2); + } + [TestMethod] public void It_gets_mocked_object_via_iserviceprovider() { @@ -75,6 +85,16 @@ public void It_gets_mocked_object_via_iserviceprovider() Assert.IsInstanceOfType(service, typeof(Empty)); } + [TestMethod] + public void It_returns_same_mock_via_iserviceprovider() + { + IServiceProvider mocker = new AutoMocker(); + var service1 = mocker.GetService(typeof(Empty)); + var service2 = mocker.GetService(typeof(Empty)); + + Assert.AreEqual(service1, service2); + } + [TestMethod] public void It_returns_null_for_unmockable_object_via_iserviceprovider() { diff --git a/Moq.AutoMock/AutoMocker.cs b/Moq.AutoMock/AutoMocker.cs index 8d825d19..67eb0b9d 100644 --- a/Moq.AutoMock/AutoMocker.cs +++ b/Moq.AutoMock/AutoMocker.cs @@ -652,9 +652,15 @@ internal bool TryGet( /// object? IServiceProvider.GetService(Type serviceType) { - return TryGet(serviceType, new ObjectGraphContext(false), out IInstance? service) - ? service.Value - : null; + if (TryGet(serviceType, new ObjectGraphContext(false), out IInstance? service)) + { + if (TypeMap is { } typeMap && !typeMap.ContainsKey(serviceType)) + { + typeMap[serviceType] = service; + } + return service.Value; + } + return null; } #endregion Get