33using GitVersion . Common ;
44using GitVersion . Configuration ;
55using GitVersion . Logging ;
6+ using Microsoft . Extensions . DependencyInjection ;
67using Console = System . Console ;
78using Environment = GitVersion . Common . Environment ;
89
@@ -17,24 +18,19 @@ private static void Main(string[] args)
1718 var exitCode = 1 ;
1819 if ( arguments != null )
1920 {
20- var fileSystem = new FileSystem ( ) ;
21- var environment = new Environment ( ) ;
21+ var services = ConfigureServices ( arguments ) ;
2222
23- try
23+ using ( var serviceProvider = services . BuildServiceProvider ( ) )
2424 {
25- var log = new Log { Verbosity = arguments . Verbosity } ;
26-
27- var configFileLocator = string . IsNullOrWhiteSpace ( arguments . ConfigFile )
28- ? ( IConfigFileLocator ) new DefaultConfigFileLocator ( fileSystem , log )
29- : new NamedConfigFileLocator ( arguments . ConfigFile , fileSystem , log ) ;
30-
31- var app = new GitVersionApplication ( fileSystem , environment , log , configFileLocator ) ;
32-
33- exitCode = app . Run ( arguments ) ;
34- }
35- catch ( Exception exception )
36- {
37- Console . Error . WriteLine ( exception . Message ) ;
25+ try
26+ {
27+ var app = serviceProvider . GetService < IGitVersionRunner > ( ) ;
28+ exitCode = app . Run ( arguments ) ;
29+ }
30+ catch ( Exception exception )
31+ {
32+ Console . Error . WriteLine ( exception . Message ) ;
33+ }
3834 }
3935 }
4036
@@ -46,6 +42,33 @@ private static void Main(string[] args)
4642 System . Environment . Exit ( exitCode ) ;
4743 }
4844
45+ private static IServiceCollection ConfigureServices ( Arguments arguments )
46+ {
47+ var services = new ServiceCollection ( ) ;
48+
49+ services . AddSingleton < IFileSystem , FileSystem > ( ) ;
50+ services . AddSingleton < IEnvironment , Environment > ( ) ;
51+ services . AddSingleton < IHelpWriter , HelpWriter > ( ) ;
52+ services . AddSingleton < IVersionWriter , VersionWriter > ( ) ;
53+ services . AddSingleton < ILog > ( new Log { Verbosity = arguments . Verbosity } ) ;
54+ services . AddSingleton ( sp => ConfigFileLocator ( sp , arguments ) ) ;
55+ services . AddSingleton < IGitVersionRunner , GitVersionRunner > ( ) ;
56+
57+ return services ;
58+ }
59+
60+ private static IConfigFileLocator ConfigFileLocator ( IServiceProvider sp , Arguments arguments )
61+ {
62+ var fileSystem = sp . GetService < IFileSystem > ( ) ;
63+ var log = sp . GetService < ILog > ( ) ;
64+
65+ var configFileLocator = string . IsNullOrWhiteSpace ( arguments . ConfigFile )
66+ ? ( IConfigFileLocator ) new DefaultConfigFileLocator ( fileSystem , log )
67+ : new NamedConfigFileLocator ( arguments . ConfigFile , fileSystem , log ) ;
68+
69+ return configFileLocator ;
70+ }
71+
4972 private static Arguments ParseArguments ( string [ ] args )
5073 {
5174 var argumentParser = new ArgumentParser ( ) ;
0 commit comments