diff --git a/src/StructureMap.Microsoft.DependencyInjection/StructureMapServiceProvider.cs b/src/StructureMap.Microsoft.DependencyInjection/StructureMapServiceProvider.cs index 0b211bf..c0aca25 100644 --- a/src/StructureMap.Microsoft.DependencyInjection/StructureMapServiceProvider.cs +++ b/src/StructureMap.Microsoft.DependencyInjection/StructureMapServiceProvider.cs @@ -19,14 +19,15 @@ public StructureMapServiceProvider(IContainer container) public object GetService(Type serviceType) { - if (serviceType.IsGenericEnumerable()) + // TryGetInstance doesn't resolve instances of concrete types + try { - // Ideally we'd like to call TryGetInstance here as well, - // but StructureMap does't like it for some weird reason. - return GetRequiredService(serviceType); + return Container.GetInstance(serviceType); + } + catch (StructureMapConfigurationException) + { + return null; } - - return Container.TryGetInstance(serviceType); } public object GetRequiredService(Type serviceType) diff --git a/test/StructureMap.Microsoft.DependencyInjection.Tests/StructureMapServiceProviderTests.cs b/test/StructureMap.Microsoft.DependencyInjection.Tests/StructureMapServiceProviderTests.cs index 6d2e5da..26c9c28 100644 --- a/test/StructureMap.Microsoft.DependencyInjection.Tests/StructureMapServiceProviderTests.cs +++ b/test/StructureMap.Microsoft.DependencyInjection.Tests/StructureMapServiceProviderTests.cs @@ -24,6 +24,16 @@ public void can_start_and_tear_down_a_scope_from_the_provider() Assert.IsType(provider.GetRequiredService(typeof(IWidget))); } + [Fact] + public void get_service_without_registered_types_return_null() + { + var root = new Container(); + + var provider = new StructureMapServiceProvider(root); + Assert.Same(provider.Container, root); + Assert.Null(provider.GetService(typeof(IWidget))); + } + public interface IWidget { } public class BlueWidget : IWidget { }