|
16 | 16 | * Change history |
17 | 17 | * |
18 | 18 | * v1.3 |
| 19 | + * - Fix: When an object resolved without registration using the concrete type it cannot be resolved from sub context |
19 | 20 | * - Added IsRegistered methods to check if an interface or type is already registered (#6) |
20 | 21 | * - Expose the ObjectContainer.RegisterFactoryAs in the IObjectContainer interface (by slawomir-brzezinski-at-interxion) |
21 | 22 | * - eliminate internal TypeHelper class |
@@ -765,12 +766,17 @@ private object ResolveObject(RegistrationKey keyToResolve, ResolutionList resolu |
765 | 766 | if (keyToResolve.Type.IsPrimitive || keyToResolve.Type == typeof(string) || keyToResolve.Type.IsValueType) |
766 | 767 | throw new ObjectContainerException("Primitive types or structs cannot be resolved: " + keyToResolve.Type.FullName, resolutionPath.ToTypeList()); |
767 | 768 |
|
768 | | - var registrationResult = GetRegistrationResult(keyToResolve) ?? |
| 769 | + var registrationResult = GetRegistrationResult(keyToResolve); |
| 770 | + var isImplicitTypeRegistration = registrationResult == null; |
| 771 | + var registrationToUse = registrationResult ?? |
769 | 772 | new KeyValuePair<ObjectContainer, IRegistration>(this, new TypeRegistration(keyToResolve.Type)); |
770 | 773 |
|
771 | | - var resolutionPathForResolve = registrationResult.Key == this ? |
| 774 | + var resolutionPathForResolve = registrationToUse.Key == this ? |
772 | 775 | resolutionPath : new ResolutionList(); |
773 | | - return registrationResult.Value.Resolve(registrationResult.Key, keyToResolve, resolutionPathForResolve); |
| 776 | + var result = registrationToUse.Value.Resolve(registrationToUse.Key, keyToResolve, resolutionPathForResolve); |
| 777 | + if (isImplicitTypeRegistration) // upon successful implicit registration, we register the rule, so that sub context can also get the same resolved value |
| 778 | + AddRegistration(keyToResolve, registrationToUse.Value); |
| 779 | + return result; |
774 | 780 | } |
775 | 781 |
|
776 | 782 | private object CreateObject(Type type, ResolutionList resolutionPath, RegistrationKey keyToResolve) |
|
0 commit comments