diff --git a/src/TinyIoC/TinyIoC.cs b/src/TinyIoC/TinyIoC.cs index d6646e5..b52822f 100644 --- a/src/TinyIoC/TinyIoC.cs +++ b/src/TinyIoC/TinyIoC.cs @@ -3716,23 +3716,26 @@ private ObjectFactoryBase GetParentObjectFactory(TypeRegistration registration) ObjectFactoryBase factory; + if (_Parent._RegisteredTypes.TryGetValue(registration, out factory)) + { + return factory.GetFactoryForChildContainer(registration.Type, _Parent, this); + } + +#if RESOLVE_OPEN_GENERICS + // Attempt container resolution of open generic if (registration.Type.IsGenericType()) { - var openTypeRegistration = new TypeRegistration(registration.Type, + var openTypeRegistration = new TypeRegistration(registration.Type.GetGenericTypeDefinition(), registration.Name); if (_Parent._RegisteredTypes.TryGetValue(openTypeRegistration, out factory)) { - return factory.GetFactoryForChildContainer(openTypeRegistration.Type, _Parent, this); + return factory.GetFactoryForChildContainer(registration.Type, _Parent, this); } return _Parent.GetParentObjectFactory(registration); } - - if (_Parent._RegisteredTypes.TryGetValue(registration, out factory)) - { - return factory.GetFactoryForChildContainer(registration.Type, _Parent, this); - } +#endif return _Parent.GetParentObjectFactory(registration); } diff --git a/tests/TinyIoC.Tests/TinyIoC.Tests.csproj b/tests/TinyIoC.Tests/TinyIoC.Tests.csproj index 98a64d4..a2cc581 100644 --- a/tests/TinyIoC.Tests/TinyIoC.Tests.csproj +++ b/tests/TinyIoC.Tests/TinyIoC.Tests.csproj @@ -16,7 +16,7 @@ - TRACE;MOQ + TRACE;MOQ;RESOLVE_OPEN_GENERICS diff --git a/tests/TinyIoC.Tests/TinyIoCTests.cs b/tests/TinyIoC.Tests/TinyIoCTests.cs index 2953df7..11b57fd 100644 --- a/tests/TinyIoC.Tests/TinyIoCTests.cs +++ b/tests/TinyIoC.Tests/TinyIoCTests.cs @@ -13,6 +13,15 @@ // FITNESS FOR A PARTICULAR PURPOSE. //=============================================================================== +#region Preprocessor Directives + +// Skip open generics tests on platforms that don't support it +#if PocketPC || NETFX_CORE +#undef RESOLVE_OPEN_GENERICS +#endif + +#endregion + using System; using System.Collections.Generic; using System.Linq;