public ComplexFunctionBuilder(Type targetType, IGenericCombiner combiner) { _targetType = targetType; _pPrev = Expression.Parameter(_targetType); _pNext = Expression.Parameter(_targetType); _combiner = combiner; }
public object CreateFunction(Type targetType, IGenericCombiner combiner) { if(IsSimplyStruct(targetType)) return BuildToolkit.CreateForwardCombiner(targetType); object result = null; result = BuildToolkit.TryCreateRecursiveNullableCombiner(targetType, combiner); if(result != null) return result; result = BuildToolkit.TryCreateCollectionCombiner(targetType); if(result != null) return result; var builder = new ComplexFunctionBuilder(targetType, combiner); result = builder.Compile(); if(result != null) return result; return BuildToolkit.CreateForwardCombiner(targetType); }