internal static Expression OptimizeObjectGraph(Container container, Expression expression)
        {
            var lifestyleInfos = PerObjectGraphOptimizableRegistrationFinder.Find(expression, container);

            if (lifestyleInfos.Any())
            {
                return(OptimizeExpression(container, expression, lifestyleInfos));
            }

            return(expression);
        }
Exemplo n.º 2
0
            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());
            }