// ReSharper disable ClassNeverInstantiated.Global // ReSharper disable AccessToDisposedClosure namespace TeamCity.Docker { using System; using CommandLine; using IoC; public class Program { public static int Main(string[] args) => (int)Parser.Default.ParseArguments(args) .MapResult( (GenerateOptions options) => Run(options), (BuildOptions options) => Run(options), _ => Result.Error); private static Result Run([NotNull] TOptions options) where TOptions: IOptions { if (options == null) { throw new ArgumentNullException(nameof(options)); } using var container = Container .Create() .Using() .Bind().As(Lifetime.Singleton).To(ctx => options) .Container; try { var runTask = container.Resolve>().Run(); runTask.Wait(); return runTask.Result; } catch (Exception ex) { container.Resolve().Log(ex); return Result.Error; } } } }