6
6
using Grace . DependencyInjection . Lifestyle ;
7
7
using Microsoft . Extensions . DependencyInjection ;
8
8
9
- namespace ZeroIoC . Benchmarks
9
+ namespace ZeroIoC . Benchmarks ;
10
+
11
+ public interface IUserService
12
+ {
13
+ }
14
+
15
+ public class UserService : IUserService
10
16
{
11
- public interface IUserService
17
+ public UserService ( Helper helper )
12
18
{
13
19
}
14
20
15
- public class UserService : IUserService
16
- {
17
- public UserService ( Helper helper )
18
- {
19
- }
21
+ public Guid Id { get ; } = Guid . NewGuid ( ) ;
22
+ }
20
23
21
- public Guid Id { get ; } = Guid . NewGuid ( ) ;
22
- }
24
+ public class Helper
25
+ {
26
+ }
23
27
24
- public class Helper
25
- {
26
- }
28
+ public class SingleHelper
29
+ {
30
+ }
27
31
28
- public class SingleHelper
32
+ public class SingleService ( SingleHelper helper )
33
+ {
34
+ private readonly SingleHelper _helper = helper ;
35
+ }
36
+
37
+ public partial class Container : ZeroIoCContainer
38
+ {
39
+ protected override void Bootstrap ( IZeroIoCContainerBootstrapper bootstrapper )
29
40
{
41
+ bootstrapper . AddTransient < Helper > ( ) ;
42
+ bootstrapper . AddTransient < IUserService , UserService > ( ) ;
43
+ bootstrapper . AddSingleton < SingleHelper > ( ) ;
44
+ bootstrapper . AddSingleton < SingleService > ( ) ;
30
45
}
46
+ }
31
47
32
- public class SingleService ( SingleHelper helper )
48
+ internal class Program
49
+ {
50
+ private static void Main ( string [ ] args )
33
51
{
34
- private readonly SingleHelper _helper = helper ;
52
+ BenchmarkRunner . Run < IoCStartupBenchmark > ( ) ;
53
+ // BenchmarkRunner.Run<IoCRuntimeBenchmark>();
35
54
}
55
+ }
36
56
37
- public partial class Container : ZeroIoCContainer
57
+ public class Creators
58
+ {
59
+ public static Container CreateZeroIoC ( )
38
60
{
39
- protected override void Bootstrap ( IZeroIoCContainerBootstrapper bootstrapper )
40
- {
41
- bootstrapper . AddTransient < Helper > ( ) ;
42
- bootstrapper . AddTransient < IUserService , UserService > ( ) ;
43
- bootstrapper . AddSingleton < SingleHelper > ( ) ;
44
- bootstrapper . AddSingleton < SingleService > ( ) ;
45
- }
61
+ return new Container ( ) ;
46
62
}
47
63
48
- internal class Program
64
+ public static ServiceProvider CreateMicrosoft ( )
49
65
{
50
- private static void Main ( string [ ] args )
51
- {
52
- BenchmarkRunner . Run < IoCStartupBenchmark > ( ) ;
53
- // BenchmarkRunner.Run<IoCRuntimeBenchmark>();
54
- }
66
+ var services = new ServiceCollection ( ) ;
67
+ services . AddSingleton < SingleHelper > ( ) ;
68
+ services . AddSingleton < SingleService > ( ) ;
69
+ services . AddTransient < Helper > ( ) ;
70
+ services . AddTransient < IUserService , UserService > ( ) ;
71
+
72
+ return services . BuildServiceProvider ( ) ;
55
73
}
56
74
57
- public class Creators
75
+ public static DependencyInjectionContainer CreateGrace ( )
58
76
{
59
- public static Container CreateZeroIoC ( )
60
- {
61
- return new Container ( ) ;
62
- }
63
-
64
- public static ServiceProvider CreateMicrosoft ( )
77
+ var grace = new DependencyInjectionContainer ( ) ;
78
+ grace . Configure ( o =>
65
79
{
66
- var services = new ServiceCollection ( ) ;
67
- services . AddSingleton < SingleHelper > ( ) ;
68
- services . AddSingleton < SingleService > ( ) ;
69
- services . AddTransient < Helper > ( ) ;
70
- services . AddTransient < IUserService , UserService > ( ) ;
80
+ o . Export < SingleHelper > ( ) . As < SingleHelper > ( ) . UsingLifestyle ( new SingletonLifestyle ( ) ) ;
81
+ o . Export < SingleService > ( ) . As < SingleService > ( ) . UsingLifestyle ( new SingletonLifestyle ( ) ) ;
71
82
72
- return services . BuildServiceProvider ( ) ;
73
- }
83
+ o . Export < Helper > ( ) . As < Helper > ( ) ;
84
+ o . Export < UserService > ( ) . As < IUserService > ( ) ;
85
+ } ) ;
74
86
75
- public static DependencyInjectionContainer CreateGrace ( )
76
- {
77
- var grace = new DependencyInjectionContainer ( ) ;
78
- grace . Configure ( o =>
79
- {
80
- o . Export < SingleHelper > ( ) . As < SingleHelper > ( ) . UsingLifestyle ( new SingletonLifestyle ( ) ) ;
81
- o . Export < SingleService > ( ) . As < SingleService > ( ) . UsingLifestyle ( new SingletonLifestyle ( ) ) ;
87
+ return grace ;
88
+ }
89
+ }
82
90
83
- o . Export < Helper > ( ) . As < Helper > ( ) ;
84
- o . Export < UserService > ( ) . As < IUserService > ( ) ;
85
- } ) ;
91
+ [ MemoryDiagnoser ]
92
+ [ Orderer ( SummaryOrderPolicy . FastestToSlowest ) ]
93
+ public class IoCStartupBenchmark
94
+ {
95
+ [ Benchmark ]
96
+ public void MicrosoftStartup ( )
97
+ {
98
+ var resolver = Creators . CreateMicrosoft ( ) ;
99
+ var userService = ( IUserService ) resolver . GetService ( typeof ( IUserService ) ) ;
100
+ var singleService = ( SingleService ) resolver . GetService ( typeof ( SingleService ) ) ;
101
+ }
86
102
87
- return grace ;
88
- }
103
+ [ Benchmark ]
104
+ public void ZeroStartup ( )
105
+ {
106
+ var resolver = Creators . CreateZeroIoC ( ) ;
107
+ var userService = ( IUserService ) resolver . Resolve ( typeof ( IUserService ) ) ;
108
+ var singleService = ( SingleService ) resolver . Resolve ( typeof ( SingleService ) ) ;
89
109
}
90
110
91
- [ MemoryDiagnoser ]
92
- [ Orderer ( SummaryOrderPolicy . FastestToSlowest ) ]
93
- public class IoCStartupBenchmark
111
+ [ Benchmark ]
112
+ public void GraceStartup ( )
94
113
{
95
- [ Benchmark ]
96
- public void MicrosoftStartup ( )
97
- {
98
- var resolver = Creators . CreateMicrosoft ( ) ;
99
- var userService = ( IUserService ) resolver . GetService ( typeof ( IUserService ) ) ;
100
- var singleService = ( SingleService ) resolver . GetService ( typeof ( SingleService ) ) ;
101
- }
114
+ var resolver = Creators . CreateGrace ( ) ;
115
+ var userService = ( IUserService ) resolver . Locate ( typeof ( IUserService ) ) ;
116
+ var singleService = ( SingleService ) resolver . Locate ( typeof ( SingleService ) ) ;
117
+ }
118
+ }
102
119
103
- [ Benchmark ]
104
- public void ZeroStartup ( )
105
- {
106
- var resolver = Creators . CreateZeroIoC ( ) ;
107
- var userService = ( IUserService ) resolver . Resolve ( typeof ( IUserService ) ) ;
108
- var singleService = ( SingleService ) resolver . Resolve ( typeof ( SingleService ) ) ;
109
- }
120
+ [ MemoryDiagnoser ]
121
+ [ Orderer ( SummaryOrderPolicy . FastestToSlowest ) ]
122
+ public class IoCRuntimeBenchmark
123
+ {
124
+ private readonly DependencyInjectionContainer _grace ;
125
+ private readonly Container _zeroioc ;
126
+ private readonly ServiceProvider _serviceProvider ;
110
127
111
- [ Benchmark ]
112
- public void GraceStartup ( )
113
- {
114
- var resolver = Creators . CreateGrace ( ) ;
115
- var userService = ( IUserService ) resolver . Locate ( typeof ( IUserService ) ) ;
116
- var singleService = ( SingleService ) resolver . Locate ( typeof ( SingleService ) ) ;
117
- }
128
+ public IoCRuntimeBenchmark ( )
129
+ {
130
+ _grace = Creators . CreateGrace ( ) ;
131
+ _serviceProvider = Creators . CreateMicrosoft ( ) ;
132
+ _zeroioc = Creators . CreateZeroIoC ( ) ;
118
133
}
119
134
120
- [ MemoryDiagnoser ]
121
- [ Orderer ( SummaryOrderPolicy . FastestToSlowest ) ]
122
- public class IoCRuntimeBenchmark
135
+ [ Benchmark ]
136
+ public IUserService MicrosoftTransient ( )
123
137
{
124
- private readonly DependencyInjectionContainer _grace ;
125
- private readonly Container _zeroioc ;
126
- private readonly ServiceProvider _serviceProvider ;
127
-
128
- public IoCRuntimeBenchmark ( )
129
- {
130
- _grace = Creators . CreateGrace ( ) ;
131
- _serviceProvider = Creators . CreateMicrosoft ( ) ;
132
- _zeroioc = Creators . CreateZeroIoC ( ) ;
133
- }
134
-
135
- [ Benchmark ]
136
- public IUserService MicrosoftTransient ( )
137
- {
138
- return ( IUserService ) _serviceProvider . GetService ( typeof ( IUserService ) ) ;
139
- }
138
+ return ( IUserService ) _serviceProvider . GetService ( typeof ( IUserService ) ) ;
139
+ }
140
140
141
- [ Benchmark ]
142
- public IUserService ZeroTransient ( )
143
- {
144
- return ( IUserService ) _zeroioc . Resolve ( typeof ( IUserService ) ) ;
145
- }
141
+ [ Benchmark ]
142
+ public IUserService ZeroTransient ( )
143
+ {
144
+ return ( IUserService ) _zeroioc . Resolve ( typeof ( IUserService ) ) ;
145
+ }
146
146
147
- [ Benchmark ]
148
- public IUserService GraceTransient ( )
149
- {
150
- return ( IUserService ) _grace . Locate ( typeof ( IUserService ) ) ;
151
- }
147
+ [ Benchmark ]
148
+ public IUserService GraceTransient ( )
149
+ {
150
+ return ( IUserService ) _grace . Locate ( typeof ( IUserService ) ) ;
151
+ }
152
152
153
- [ Benchmark ]
154
- public SingleService MicrosoftSingleton ( )
155
- {
156
- return ( SingleService ) _serviceProvider . GetService ( typeof ( SingleService ) ) ;
157
- }
153
+ [ Benchmark ]
154
+ public SingleService MicrosoftSingleton ( )
155
+ {
156
+ return ( SingleService ) _serviceProvider . GetService ( typeof ( SingleService ) ) ;
157
+ }
158
158
159
- [ Benchmark ]
160
- public SingleService ZeroSingleton ( )
161
- {
162
- return ( SingleService ) _zeroioc . Resolve ( typeof ( SingleService ) ) ;
163
- }
159
+ [ Benchmark ]
160
+ public SingleService ZeroSingleton ( )
161
+ {
162
+ return ( SingleService ) _zeroioc . Resolve ( typeof ( SingleService ) ) ;
163
+ }
164
164
165
- [ Benchmark ]
166
- public SingleService GraceSingleton ( )
167
- {
168
- return ( SingleService ) _grace . Locate ( typeof ( SingleService ) ) ;
169
- }
165
+ [ Benchmark ]
166
+ public SingleService GraceSingleton ( )
167
+ {
168
+ return ( SingleService ) _grace . Locate ( typeof ( SingleService ) ) ;
170
169
}
171
170
}
0 commit comments