Skip to content

Commit c8caa6d

Browse files
committed
Add Microsoft.Extensions.DependencyInjection
1 parent 5b566a5 commit c8caa6d

File tree

4 files changed

+48
-22
lines changed

4 files changed

+48
-22
lines changed

src/GitVersionExe/GitVersionExe.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="$(PackageVersion_LibGit2Sharp_NativeBinaries)" />
2828
</ItemGroup>
2929

30+
<ItemGroup>
31+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
32+
</ItemGroup>
33+
3034
<ItemGroup>
3135
<ProjectReference Include="..\GitVersionCore\GitVersionCore.csproj" />
3236
</ItemGroup>

src/GitVersionExe/GitVersionApplication.cs renamed to src/GitVersionExe/GitVersionRunner.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace GitVersion
1212
{
13-
public class GitVersionApplication : IGitVersionApplication
13+
public class GitVersionRunner : IGitVersionRunner
1414
{
1515
private readonly IFileSystem fileSystem;
1616
private readonly IEnvironment environment;
@@ -19,15 +19,14 @@ public class GitVersionApplication : IGitVersionApplication
1919
private readonly IHelpWriter helpWriter;
2020
private readonly IVersionWriter versionWriter;
2121

22-
public GitVersionApplication(IFileSystem fileSystem, IEnvironment environment, ILog log, IConfigFileLocator configFileLocator)
22+
public GitVersionRunner(IFileSystem fileSystem, IEnvironment environment, ILog log, IConfigFileLocator configFileLocator, IVersionWriter versionWriter, IHelpWriter helpWriter)
2323
{
2424
this.fileSystem = fileSystem;
2525
this.environment = environment;
2626
this.log = log;
2727
this.configFileLocator = configFileLocator;
28-
29-
versionWriter = new VersionWriter();
30-
helpWriter = new HelpWriter(versionWriter);
28+
this.versionWriter = versionWriter;
29+
this.helpWriter = helpWriter;
3130
}
3231

3332
public int Run(Arguments arguments)

src/GitVersionExe/IGitVersionApplication.cs renamed to src/GitVersionExe/IGitVersionRunner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace GitVersion
22
{
3-
public interface IGitVersionApplication
3+
public interface IGitVersionRunner
44
{
55
int Run(Arguments arguments);
66
}

src/GitVersionExe/Program.cs

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using GitVersion.Common;
44
using GitVersion.Configuration;
55
using GitVersion.Logging;
6+
using Microsoft.Extensions.DependencyInjection;
67
using Console = System.Console;
78
using 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

Comments
 (0)