コード例 #1
0
        public IEnumerable <Expression> GetPopulation(MappingExpressionFactoryBase.MappingCreationContext context)
        {
            var mappingData = context.MappingData;
            var mapperData  = context.MapperData;

            GetCreationCallbacks(context, out var preCreationCallback, out var postCreationCallback);

            var populationsAndCallbacks = GetPopulationsAndCallbacks(mappingData).ToList();

            if (context.InstantiateLocalVariable && mapperData.Context.UseLocalVariable)
            {
                yield return(preCreationCallback);

                var assignCreatedObject = postCreationCallback != null;

                yield return(GetLocalVariableInstantiation(assignCreatedObject, populationsAndCallbacks, mappingData));

                yield return(postCreationCallback);
            }

            yield return(GetObjectRegistrationCallOrNull(mapperData));

            foreach (var population in populationsAndCallbacks)
            {
                yield return(population);
            }

            mappingData.MapperKey.AddSourceMemberTypeTesterIfRequired(mappingData);
        }
コード例 #2
0
        private static void GetCreationCallbacks(
            MappingExpressionFactoryBase.MappingCreationContext context,
            out Expression preCreationCallback,
            out Expression postCreationCallback)
        {
            if (context.RuleSet.Settings.UseSingleRootMappingExpression ||
                !context.InstantiateLocalVariable ||
                context.MapperData.TargetIsDefinitelyPopulated())
            {
                preCreationCallback = postCreationCallback = null;
                return;
            }

            preCreationCallback  = GetCreationCallbackOrNull(Before, context.MapperData);
            postCreationCallback = GetCreationCallbackOrNull(After, context.MapperData);
        }