-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathProgram.cs
More file actions
89 lines (77 loc) · 3.2 KB
/
Program.cs
File metadata and controls
89 lines (77 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using JavaVersionSwitcher.Adapters;
using JavaVersionSwitcher.Commands;
using JavaVersionSwitcher.Commands.config;
using JavaVersionSwitcher.Logging;
using JavaVersionSwitcher.Services;
using JetBrains.Annotations;
using SimpleInjector;
using Spectre.Console;
using Spectre.Console.Cli;
namespace JavaVersionSwitcher;
[UsedImplicitly]
public class Program
{
private static int Main(string[] args)
{
var registrar = BuildRegistrar();
var app = new CommandApp(registrar);
app.Configure(ConfigureApp);
return app.Run(args);
}
public static void ConfigureApp(IConfigurator config)
{
config.SetApplicationName("dotnet jvs");
config.AddExample(new[] { "scan", "--force" });
config.AddExample(new[] { "switch" });
config.SetExceptionHandler((ex, _) =>
{
#if DEBUG
AnsiConsole.WriteException(ex, ExceptionFormats.ShowLinks);
#else
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
#endif
return -1;
});
config.AddCommand<ScanJavaInstallationsCommand>("scan")
.WithAlias("scan-for-java")
.WithDescription("Scan for existing java installations.");
config.AddCommand<CheckSettingsCommand>("check")
.WithDescription("Checks if environment is set up correctly.");
config.AddCommand<SwitchVersionCommand>("switch")
.WithDescription("Switch to a different Java version.");
config.AddBranch("config", cfg =>
{
cfg.SetDescription("get or set configurations options.");
cfg.AddCommand<GetConfigCommand>("get")
.WithDescription("get configuration options.");
cfg.AddCommand<SetConfigCommand>("set")
.WithDescription("set configuration options.");
cfg.AddCommand<ShowConfigCommand>("show")
.WithDescription("show possible configuration options.");
});
#if DEBUG
config.ValidateExamples();
#endif
}
private static ITypeRegistrar BuildRegistrar()
{
var container = new Container();
container.Options.ResolveUnregisteredConcreteTypes = true;
container.Register<ILogger, Logger>(Lifestyle.Singleton);
container.Register<IConfigurationService, ConfigurationService>(Lifestyle.Singleton);
container.Register<IStorageAdapter, StorageAdapter>(Lifestyle.Singleton);
container.Register<IJavaHomeAdapter, JavaHomeAdapter>(Lifestyle.Singleton);
container.Register<IPathAdapter, PathAdapter>(Lifestyle.Singleton);
container.Register<IJavaInstallationsAdapter, JavaInstallationsAdapter>(Lifestyle.Singleton);
container.Register<JavaInstallationsAdapterConfigurationProvider>(Lifestyle.Singleton);
container.Register<IShellAdapter, ShellAdapter>(Lifestyle.Singleton);
container.Register<IRegistryAdapter, RegistryAdapter>(Lifestyle.Singleton);
container.Collection.Register<IConfigurationProvider>(
new[]
{
typeof(JavaInstallationsAdapterConfigurationProvider),
},
Lifestyle.Singleton);
return new SimpleInjectorRegistrar(container);
}
}