internal static Expression OptimizeObjectGraph(Container container, Expression expression) { var lifestyleInfos = PerObjectGraphOptimizableRegistrationFinder.Find(expression, container); if (lifestyleInfos.Any()) { return(OptimizeExpression(container, expression, lifestyleInfos)); } return(expression); }
public static OptimizableLifestyleInfo[] Find(Expression expression, Container container) { var finder = new PerObjectGraphOptimizableRegistrationFinder(container); finder.Visit(expression); var lifestyleGroups = finder.perObjectGraphRegistrations .GroupBy(r => r.Registration.Lifestyle, ReferenceEqualityComparer <Lifestyle> .Instance); return(( from lifestyleGroup in lifestyleGroups select new OptimizableLifestyleInfo( (ScopedLifestyle)lifestyleGroup.Key, lifestyleGroup.GroupBy(info => info.Registration, ReferenceEqualityComparer <Registration> .Instance) .Select(g => g.First()))) .ToArray()); }