@@ -5041,7 +5041,7 @@ public static Expression GetLazyExpressionOrDefault(Request request, bool nullWr
5041
5041
5042
5042
// creates: r => new Lazy(() => r.Resolve<X>(key))
5043
5043
// or for singleton : r => new Lazy(() => r.Root.Resolve<X>(key))
5044
- var serviceExpr = Resolver.CreateResolutionExpression(serviceRequest);
5044
+ var serviceExpr = Resolver.CreateResolutionExpression(serviceRequest, openResolutionScope: false, asResolutionCall: true );
5045
5045
5046
5046
// The conversion is required in .NET 3.5 to handle lack of covariance for Func<out T>
5047
5047
// So that Func<Derived> may be used for Func<Base>
@@ -5087,7 +5087,7 @@ private static Expression GetFuncOrActionExpressionOrDefault(Request request)
5087
5087
var serviceRequest = request.Push(serviceType, flags: RequestFlags.IsWrappedInFunc | RequestFlags.IsDirectlyWrappedInFunc);
5088
5088
var container = request.Container;
5089
5089
var serviceExpr = container.Rules.FuncAndLazyWithoutRegistration && !isAction
5090
- ? Resolver.CreateResolutionExpression(serviceRequest)
5090
+ ? Resolver.CreateResolutionExpression(serviceRequest, openResolutionScope: false, asResolutionCall: true )
5091
5091
: container.ResolveFactory(serviceRequest)?.GetExpressionOrDefault(serviceRequest);
5092
5092
5093
5093
if (serviceExpr == null)
@@ -7863,7 +7863,8 @@ public static T New<T>(this IResolver resolver, Made.TypedMade<T> made,
7863
7863
private static readonly ConstantExpression _nullTypeExpr = Constant(null, typeof(Type));
7864
7864
private static readonly ConstantExpression _nullExpr = Constant(null, typeof(object));
7865
7865
7866
- internal static Expression CreateResolutionExpression(Request request, bool opensResolutionScope = false)
7866
+ internal static Expression CreateResolutionExpression(Request request,
7867
+ bool openResolutionScope = false, bool asResolutionCall = false)
7867
7868
{
7868
7869
if (request.Rules.DependencyResolutionCallExprs != null &&
7869
7870
request.Factory != null && !request.Factory.HasRuntimeState)
@@ -7889,7 +7890,7 @@ internal static Expression CreateResolutionExpression(Request request, bool open
7889
7890
: container.GetConstantExpression(details.ServiceKey, typeof(object));
7890
7891
7891
7892
Expression resolverExpr;
7892
- if (!opensResolutionScope )
7893
+ if (!openResolutionScope )
7893
7894
{
7894
7895
resolverExpr = ResolverContext.GetRootOrSelfExpr(request);
7895
7896
}
@@ -7909,9 +7910,9 @@ internal static Expression CreateResolutionExpression(Request request, bool open
7909
7910
}
7910
7911
7911
7912
var parentFlags = default(RequestFlags);
7912
- if (opensResolutionScope )
7913
+ if (openResolutionScope )
7913
7914
parentFlags |= RequestFlags.OpensResolutionScope;
7914
- if ((request.Flags & RequestFlags.StopRecursiveDependencyCheck) != 0)
7915
+ if (asResolutionCall || (request.Flags & RequestFlags.StopRecursiveDependencyCheck) != 0)
7915
7916
parentFlags |= RequestFlags.StopRecursiveDependencyCheck;
7916
7917
7917
7918
// Only parent is converted to be passed to Resolve.
@@ -9857,7 +9858,7 @@ public virtual Expression GetExpressionOrDefault(Request request)
9857
9858
&& request.GetActualServiceType() != typeof(void));
9858
9859
9859
9860
if (getAsRsolutionCall)
9860
- return Resolver.CreateResolutionExpression(request, setup.OpenResolutionScope);
9861
+ return Resolver.CreateResolutionExpression(request, setup.OpenResolutionScope, setup.AsResolutionCall );
9861
9862
9862
9863
var cacheExpression =
9863
9864
Caching != FactoryCaching.DoNotCache &&
@@ -9986,7 +9987,7 @@ cacheEntry.Value.ScopeNameOrDependencyCount is Container.Registry.TransientDepen
9986
9987
((Container)container).CacheFactoryExpression(request.FactoryID, serviceExpr, reuse,
9987
9988
depCount, cacheEntry);
9988
9989
9989
- return Resolver.CreateResolutionExpression(request, false );
9990
+ return Resolver.CreateResolutionExpression(request);
9990
9991
}
9991
9992
}
9992
9993
}
@@ -11333,7 +11334,7 @@ public override Expression GetExpressionOrDefault(Request request)
11333
11334
if (// preventing recursion
11334
11335
(request.Flags & RequestFlags.IsGeneratedResolutionDependencyExpression) == 0 && !request.IsResolutionCall &&
11335
11336
(Setup.AsResolutionCall || Setup.AsResolutionCallForExpressionGeneration && request.Rules.UsedForExpressionGeneration))
11336
- return Resolver.CreateResolutionExpression(request.WithResolvedFactory(this), Setup.OpenResolutionScope);
11337
+ return Resolver.CreateResolutionExpression(request.WithResolvedFactory(this), Setup.OpenResolutionScope, Setup.AsResolutionCall );
11337
11338
11338
11339
// First look for decorators if it is not already a decorator
11339
11340
var serviceType = request.ServiceType;
0 commit comments