-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDependencyInjectionService.cs
More file actions
41 lines (32 loc) · 1.2 KB
/
DependencyInjectionService.cs
File metadata and controls
41 lines (32 loc) · 1.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
using System;
using Microsoft.Extensions.DependencyInjection;
using TreeBasedCli;
namespace Samples.AnimalKingdom
{
public sealed class DependencyInjectionService : IDependencyInjectionService
{
private IServiceProvider serviceProvider;
private static readonly Lazy<DependencyInjectionService> lazy
= new Lazy<DependencyInjectionService>(() => new DependencyInjectionService());
private DependencyInjectionService()
{
ServiceCollection services = BuildServiceCollection();
this.serviceProvider = services.BuildServiceProvider();
}
public static DependencyInjectionService Instance => lazy.Value;
private static ServiceCollection BuildServiceCollection()
{
var services = new ServiceCollection();
services.AddTransient<IUserInterface, ConsoleUserInterface>();
return services;
}
public T GetUnregisteredService<T>() where T : notnull
{
return ActivatorUtilities.CreateInstance<T>(this.serviceProvider);
}
public T Resolve<T>() where T : notnull
{
return this.GetUnregisteredService<T>();
}
}
}