public static void Main()
Console.WriteLine("Hello World");
var articleMetricsService = new ArticleMetricsService(new MyErrorDecorator<AltmetricsServicePoC>(new AltmetricsServicePoC()));
articleMetricsService.Get();
public class ArticleMetricsService
private readonly MyDecorator<AltmetricsServicePoC> _altmetricsService;
public ArticleMetricsService(MyDecorator<AltmetricsServicePoC> altmetricsService)
_altmetricsService = altmetricsService;
var result = _altmetricsService.Execute(x => x.GetScoreWithException(true));
Console.WriteLine(result.Result);
Console.WriteLine(result.Exception?.ToString());
public class AltmetricsServicePoC
public int GetNumber(int x)
public string GetDefaultString()
public int GetScoreWithException(bool shouldThrowException)
if (shouldThrowException)
throw new Exception("some exception");
public class ResultWithException
public object Result { get; set; }
public Exception Exception { get; set; }
public class MyDecorator<T>
private readonly T _decorated;
public MyDecorator(T decorated)
public ResultWithException Execute(Func<T, dynamic> action )
var result = action(_decorated);
return new ResultWithException
return new ResultWithException