Exceptions

Any exception that is thrown from the method or constructor is thrown as is. You can catch it over the AppRunner<T>.Run() method otherwise exception will be unhandled and application will crash.

try
{
    AppRunner<Calculator> appRunner = new AppRunner<Calculator>();
    return appRunner.Run(args);
}
catch(MyBusinessException ex)
{
    Console.WriteLine(ex.Message);
}