From 36886dedd61b33e68eb77a1065636de14ebcbbcb Mon Sep 17 00:00:00 2001 From: Marcos Vinicius Maia Date: Fri, 29 Dec 2017 17:08:35 -0200 Subject: [PATCH 1/3] Added error fallback methods --- Chain/OngoingChaining.cs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Chain/OngoingChaining.cs b/Chain/OngoingChaining.cs index 2c13b79..4c7f531 100644 --- a/Chain/OngoingChaining.cs +++ b/Chain/OngoingChaining.cs @@ -4,16 +4,44 @@ namespace Chain { public class OngoingChaining where T : class { - private T _currentResult; + private T _currentResult; + private Action _errorFallback; + private Action _globalErrorFallback; internal OngoingChaining(T currentResult) { _currentResult = currentResult; } + public OngoingChaining WithErrorFallback(Action onError) + { + _errorFallback = onError; + return this; + } + + public OngoingChaining WithGlobalErrorFallback(Action onError) + { + _globalErrorFallback = onError; + return this; + } + public OngoingChaining Then(Func nextFunction) where TNext : class { - return _currentResult != null ? new OngoingChaining(nextFunction(_currentResult)) : new OngoingChaining(null); + try + { + var result = _currentResult != null + ? new OngoingChaining(nextFunction(_currentResult)) + : new OngoingChaining(null); + + _errorFallback = null; + return result; + } + catch (Exception ex) + { + _errorFallback?.Invoke(ex); + _globalErrorFallback?.Invoke(ex); + return null; + } } public OngoingChaining OrElse(T fallback) From 2cea7dbd7b2d22129ffcb845820b9c43b10b1b92 Mon Sep 17 00:00:00 2001 From: Marcos Vinicius Maia Date: Fri, 29 Dec 2017 17:08:41 -0200 Subject: [PATCH 2/3] Updated gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 070b636..f9e37fc 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,5 @@ Generated_Code #added for RIA/Silverlight projects _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML + +\.idea/ From 6acd6e0845146af6e7776b58aa91951ac66dd6e7 Mon Sep 17 00:00:00 2001 From: Marcos Vinicius Maia Date: Fri, 5 Jan 2018 13:57:35 -0200 Subject: [PATCH 3/3] Fixed OrElse not working at the initial function --- Chain/Chain.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Chain/Chain.cs b/Chain/Chain.cs index aef0aeb..f5c7e76 100644 --- a/Chain/Chain.cs +++ b/Chain/Chain.cs @@ -1,5 +1,4 @@ - -using System; +using System; namespace Chain { @@ -7,7 +6,14 @@ public abstract class Chain { public static OngoingChaining Do(Func startFunction) where T : class { - return new OngoingChaining(startFunction()); + try + { + return new OngoingChaining(startFunction()); + } + catch + { + return new OngoingChaining(null); + } } public static OngoingChaining Do(T startObject) where T : class @@ -15,4 +21,4 @@ public static OngoingChaining Do(T startObject) where T : class return new OngoingChaining(startObject); } } -} +} \ No newline at end of file