@@ -12,7 +12,7 @@ public sealed class DiContainerBindings
1212 {
1313 internal readonly Dictionary < IntPtr , Binding > bindingsByType ;
1414 private readonly List < ContainerDelegate > injectDelegates ;
15- private readonly List < ContainerDelegate > initializeDelegates ;
15+ private readonly List < object > initializeDelegates ;
1616 private readonly List < object > startupDelegates ;
1717 private readonly List < object > disposables ;
1818
@@ -74,6 +74,11 @@ public void QueueInitialize(ContainerDelegate containerDelegate)
7474 initializeDelegates . Add ( containerDelegate ) ;
7575 }
7676
77+ public void QueueInitializeAsync ( AsyncContainerDelegate asyncContainerDelegate )
78+ {
79+ initializeDelegates . Add ( asyncContainerDelegate ) ;
80+ }
81+
7782 [ Obsolete ( "Use QueueInitialize instead" ) ]
7883 public void QueueInitialization ( ContainerDelegate containerDelegate )
7984 {
@@ -178,7 +183,17 @@ internal Binding<TApparent, TConcrete> BindAsSubContainer<TApparent, TConcrete>(
178183
179184 foreach ( var initializationDelegate in initializeDelegates )
180185 {
181- initializationDelegate . Invoke ( subContainer ) ;
186+ switch ( initializationDelegate )
187+ {
188+ case AsyncContainerDelegate asyncInitializationDelegate :
189+ await asyncInitializationDelegate . Invoke ( subContainer , ct ) ;
190+ break ;
191+ case ContainerDelegate syncInitializationDelegate :
192+ syncInitializationDelegate . Invoke ( subContainer ) ;
193+ break ;
194+ default :
195+ throw new InvalidOperationException ( $ "Unexpected initialization delegate type: { initializationDelegate . GetType ( ) } ") ;
196+ }
182197 }
183198
184199 foreach ( var startupDelegate in startupDelegates )
@@ -218,9 +233,19 @@ public async ValueTask<DiContainer> Build(CancellationToken ct)
218233 injectDelegate . Invoke ( diContainer ) ;
219234 }
220235
221- foreach ( var initializeDelegate in initializeDelegates )
236+ foreach ( var initializationDelegate in initializeDelegates )
222237 {
223- initializeDelegate . Invoke ( diContainer ) ;
238+ switch ( initializationDelegate )
239+ {
240+ case AsyncContainerDelegate asyncInitializationDelegate :
241+ await asyncInitializationDelegate . Invoke ( diContainer , ct ) ;
242+ break ;
243+ case ContainerDelegate syncInitializationDelegate :
244+ syncInitializationDelegate . Invoke ( diContainer ) ;
245+ break ;
246+ default :
247+ throw new InvalidOperationException ( $ "Unexpected initialization delegate type: { initializationDelegate . GetType ( ) } ") ;
248+ }
224249 }
225250
226251 foreach ( var startupDelegate in startupDelegates )
0 commit comments