private Expression CreateResolveExpressionRecursively(TypeKey requestedTypeKey, DependencyInjectionContainer container, DependencyOverrides dependencyOverrides, bool?tryResolveAll = null) { // Check if the instance is overridden if (dependencyOverrides?.HasOverriddenInstance(requestedTypeKey) == true) { return(Expression.Convert(Expression.Call(Expression.Call(Constants.ResolveContextParameterExpression, Constants.GetDependencyOverridesProperty), Constants.GetOverriddenInstanceMethod, Expression.Constant(requestedTypeKey)), requestedTypeKey.Type)); } // Else ask the container for a ResolveInfo to identify how the returned expression should be composed var resolveInfo = container.GetResolveInfo(requestedTypeKey, tryResolveAll); if (resolveInfo is ResolveRegistrationInfo resolveRegistrationInfo) { return(CreateResolveExpressionRecursively(requestedTypeKey, resolveRegistrationInfo.Registration, dependencyOverrides, container)); } if (resolveInfo is ResolveAllInfo resolveAllInfo) { return(CreateResolveAllExpressionRecursively(resolveAllInfo, dependencyOverrides, container)); } throw new InvalidOperationException($"Cannot handle ResolveInfo \"{resolveInfo}\" in this current implementation of \"{nameof(CompiledLinqExpressionFactory)}\""); }