44using System . CommandLine ;
55using System . CommandLine . Invocation ;
66using System . Diagnostics . CodeAnalysis ;
7- using Autofac ;
8- using Autofac . Extensions . DependencyInjection ;
97using Microsoft . Build . Locator ;
108using Microsoft . Extensions . DependencyInjection ;
119using Microsoft . Extensions . Logging ;
1210using Microsoft . Extensions . Logging . Console ;
1311using Silk . NET . SilkTouch . Caching ;
1412using Silk . NET . SilkTouch . Clang ;
1513using Silk . NET . SilkTouch . Mods ;
16- using Silk . NET . SilkTouch . Mods . Bakery ;
1714using Silk . NET . SilkTouch . Sources ;
1815
1916namespace Silk . NET . SilkTouch ;
@@ -102,10 +99,10 @@ public async Task RunAsync(string[] args)
10299 // Register MSBuild
103100 MSBuildLocator . RegisterDefaults ( ) ;
104101
105- // Build container
106- var builder = new ContainerBuilder ( ) ;
107- Configure ( builder , ctx ) ;
108- await using ILifetimeScope container = builder . Build ( ) ;
102+ // Build service provider
103+ var services = new ServiceCollection ( ) ;
104+ Configure ( services , ctx ) ;
105+ await using var provider = services . BuildServiceProvider ( ) ;
109106
110107 var jobKeysToRun = new HashSet < string > (
111108 ctx . ParseResult . GetValueForOption ( OnlyOption ) ?? [ ] ,
@@ -127,7 +124,7 @@ public async Task RunAsync(string[] args)
127124 return jobKeysToRun . Count == 0 || jobKeysToRun . Contains ( job . Key ) ;
128125 } ) ;
129126
130- var logger = container . Resolve < ILogger < SilkTouchHost > > ( ) ;
127+ var logger = provider . GetRequiredService < ILogger < SilkTouchHost > > ( ) ;
131128 try
132129 {
133130 await Parallel . ForEachAsync (
@@ -143,10 +140,7 @@ await Parallel.ForEachAsync(
143140 jobKvp . Value . Config ,
144141 services =>
145142 {
146- ConfigureForward (
147- new AutofacServiceProvider ( container ) ,
148- services
149- ) ;
143+ ConfigureForward ( provider , services ) ;
150144 jobKvp . Value . Configure . Invoke ( services . SilkTouch ( ) ) ;
151145 }
152146 ) ;
@@ -182,9 +176,9 @@ private static void Exit(int exitCode) =>
182176 /// Dependencies defined here are only accessible to the host.
183177 /// Make them available to the jobs by using <see cref="ConfigureForward"/>.
184178 /// </summary>
185- private void Configure ( ContainerBuilder builder , InvocationContext ctx )
179+ private void Configure ( IServiceCollection services , InvocationContext ctx )
186180 {
187- var services = new ServiceCollection ( )
181+ services
188182 . AddLogging ( builder =>
189183 {
190184 builder . AddSimpleConsole ( opts =>
@@ -200,8 +194,6 @@ private void Configure(ContainerBuilder builder, InvocationContext ctx)
200194 } )
201195 . AddOptions ( ) ;
202196
203- builder . Populate ( services ) ;
204-
205197 {
206198 // Create config
207199 var config = new SilkTouchHostConfiguration ( )
@@ -217,49 +209,25 @@ private void Configure(ContainerBuilder builder, InvocationContext ctx)
217209 ) ;
218210 }
219211
220- builder . RegisterInstance ( config ) . SingleInstance ( ) ;
221-
222- builder
223- . RegisterType < MSBuildModContextFactory > ( )
224- . As < IModContextFactory > ( )
225- . SingleInstance ( ) ;
226-
227- builder . RegisterType < ResponseFileHandler > ( ) . SingleInstance ( ) ;
228-
229- builder
230- . RegisterType < DefaultBakeStrategy > ( )
231- . AsSelf ( )
232- . AsImplementedInterfaces ( )
233- . SingleInstance ( ) ;
234-
235- builder . RegisterType < FileSystemCacheProvider > ( ) . As < ICacheProvider > ( ) . SingleInstance ( ) ;
236-
237- builder . RegisterType < GitInputSource > ( ) . As < IInputSource > ( ) . SingleInstance ( ) ;
212+ services . AddSingleton ( config ) ;
238213
239- builder . RegisterType < NuGetInputSource > ( ) . As < IInputSource > ( ) . SingleInstance ( ) ;
240-
241- builder . RegisterType < UriBasedInputResolver > ( ) . As < IInputResolver > ( ) . SingleInstance ( ) ;
214+ services . AddSingleton < IModContextFactory , MSBuildModContextFactory > ( ) ;
215+ services . AddSingleton < ICacheProvider , FileSystemCacheProvider > ( ) ;
216+ services . AddSingleton < IInputSource , GitInputSource > ( ) ;
217+ services . AddSingleton < IInputSource , NuGetInputSource > ( ) ;
218+ services . AddSingleton < IInputResolver , UriBasedInputResolver > ( ) ;
242219
243220 if ( OperatingSystem . IsWindows ( ) )
244221 {
245- builder
246- . RegisterType < WindowsStdIncludeResolver > ( )
247- . As < IStdIncludeResolver > ( )
248- . SingleInstance ( ) ;
222+ services . AddSingleton < IStdIncludeResolver , WindowsStdIncludeResolver > ( ) ;
249223 }
250224 else if ( OperatingSystem . IsMacOS ( ) )
251225 {
252- builder
253- . RegisterType < MacOSStdIncludeResolver > ( )
254- . As < IStdIncludeResolver > ( )
255- . SingleInstance ( ) ;
226+ services . AddSingleton < IStdIncludeResolver , MacOSStdIncludeResolver > ( ) ;
256227 }
257228 else
258229 {
259- builder
260- . RegisterType < UnixStdIncludeResolver > ( )
261- . As < IStdIncludeResolver > ( )
262- . SingleInstance ( ) ;
230+ services . AddSingleton < IStdIncludeResolver , UnixStdIncludeResolver > ( ) ;
263231 }
264232 }
265233 }
@@ -273,50 +241,11 @@ private void ConfigureForward(IServiceProvider host, IServiceCollection services
273241 services . AddSingleton ( host . GetRequiredService < ILoggerFactory > ( ) ) ;
274242 services . AddSingleton ( typeof ( ILogger < > ) , typeof ( Logger < > ) ) ;
275243
276- services . AddSingleton ( host . GetRequiredService < IInputResolver > ( ) ) ;
277-
278244 services . AddSingleton ( host . GetRequiredService < SilkTouchHostConfiguration > ( ) ) ;
279245 services . AddSingleton ( host . GetRequiredService < IModContextFactory > ( ) ) ;
280-
281- builder . RegisterType < MSBuildModContextFactory > ( ) . As < IModContextFactory > ( ) . SingleInstance ( ) ;
282-
283- builder . RegisterType < ResponseFileHandler > ( ) . SingleInstance ( ) ;
284-
285- builder
286- . RegisterType < DefaultBakeStrategy > ( )
287- . AsSelf ( )
288- . AsImplementedInterfaces ( )
289- . SingleInstance ( ) ;
290-
291- builder . RegisterType < FileSystemCacheProvider > ( ) . As < ICacheProvider > ( ) . SingleInstance ( ) ;
292-
293- builder . RegisterType < GitInputSource > ( ) . As < IInputSource > ( ) . SingleInstance ( ) ;
294-
295- builder . RegisterType < NuGetInputSource > ( ) . As < IInputSource > ( ) . SingleInstance ( ) ;
296-
297- builder . RegisterType < UriBasedInputResolver > ( ) . As < IInputResolver > ( ) . SingleInstance ( ) ;
298-
299- if ( OperatingSystem . IsWindows ( ) )
300- {
301- builder
302- . RegisterType < WindowsStdIncludeResolver > ( )
303- . As < IStdIncludeResolver > ( )
304- . SingleInstance ( ) ;
305- }
306- else if ( OperatingSystem . IsMacOS ( ) )
307- {
308- builder
309- . RegisterType < MacOSStdIncludeResolver > ( )
310- . As < IStdIncludeResolver > ( )
311- . SingleInstance ( ) ;
312- }
313- else
314- {
315- builder
316- . RegisterType < UnixStdIncludeResolver > ( )
317- . As < IStdIncludeResolver > ( )
318- . SingleInstance ( ) ;
319- }
246+ services . AddSingleton ( host . GetRequiredService < ICacheProvider > ( ) ) ;
247+ services . AddSingleton ( host . GetRequiredService < IInputResolver > ( ) ) ;
248+ services . AddSingleton ( host . GetRequiredService < IStdIncludeResolver > ( ) ) ;
320249 }
321250
322251 private record JobDefinition (
0 commit comments