/// <summary>Add the transformation step to the transformation chain.</summary>
 public TransformationBuilder<TSource, TDestination> Apply(AbstractTransformation<TSource, TDestination> transformation)
 {
     ArgGuard.NotNull(transformation, nameof(transformation));
    
     Transformations.Add(transformation);
     return this;
 }
        /// <summary>Add the specified isolated transformation step to the transformation chain if the specified condition returns true.</summary>
        /// <param name="condition">The condition function that defines whether to apply the specified transformation. It's evaluated in run-time when the
        /// transformation is going.</param>
        /// <param name="transformation">The transformation to apply.</param>
        public TransformationBuilder<TSource, TDestination> IfApplyIsolated(Func<TSource, TDestination, TransformationContext, bool> condition,
            AbstractTransformation<TSource, TDestination> transformation)
        {
            ArgGuard.NotNull(condition, nameof(condition));
            ArgGuard.NotNull(transformation, nameof(transformation));

            Transformations.Add(new ConditionalTransformer<TSource, TDestination>(condition, transformation.Transform, true));
            return this;
        }
 /// <summary>Add the isolated transformation step to the transformation chain.</summary>
 public TransformationBuilder<TSource, TDestination> ApplyIsolated(AbstractTransformation<TSource, TDestination> transformation, bool? keepInitialDestination = null)
 {
     ArgGuard.NotNull(transformation, nameof(transformation));
   
     transformation.IsIsolatedResult = true;
     transformation.KeepInitialDestination = keepInitialDestination ?? !Configuration.IsolateInitialDestination;
     Transformations.Add(transformation);
     return this;
 }