@@ -383,6 +383,50 @@ public void NonLazyRegistrationMutatorMustBeApplied(string name)
383
383
}
384
384
}
385
385
386
+ [ Theory ]
387
+ [ InlineData ( null ) ]
388
+ [ InlineData ( "name" ) ]
389
+ public void RegisterLazyMustAddOpenGenericFactoryRegistrationSourceOnlyOnceForOpenGenericTypes (
390
+ string name )
391
+ {
392
+ var containerBuilder = new ContainerBuilder ( ) ;
393
+ containerBuilder . RegisterLazy ( typeof ( IGenericService < , , > ) , typeof ( GenericService < , , > ) , name ) ;
394
+ containerBuilder . RegisterLazy ( typeof ( IGenericService2 < > ) , typeof ( GenericService2 < > ) , name ) ;
395
+
396
+ using ( var container = containerBuilder . Build ( ) )
397
+ {
398
+ var count = container . ComponentRegistry . Sources
399
+ . OfType < OpenGenericFactoryRegistrationSource > ( )
400
+ . Count ( ) ;
401
+
402
+ Assert . Equal ( 1 , count ) ;
403
+ }
404
+ }
405
+
406
+ [ Theory ]
407
+ [ InlineData ( null ) ]
408
+ [ InlineData ( "name" ) ]
409
+ public void RegisterLazyMustNotAddOpenGenericFactoryRegistrationSourceForNonOpenGenericTypes (
410
+ string name )
411
+ {
412
+ var containerBuilder = new ContainerBuilder ( ) ;
413
+
414
+ containerBuilder . RegisterLazy ( typeof ( IService1 ) , typeof ( Service1 ) , name ) ;
415
+
416
+ containerBuilder . RegisterLazy (
417
+ typeof ( IGenericService < ParameterType1 , ParameterType2 , ParameterType3 > ) ,
418
+ typeof ( GenericService < ParameterType1 , ParameterType2 , ParameterType3 > ) , name ) ;
419
+
420
+ using ( var container = containerBuilder . Build ( ) )
421
+ {
422
+ var count = container . ComponentRegistry . Sources
423
+ . OfType < OpenGenericFactoryRegistrationSource > ( )
424
+ . Count ( ) ;
425
+
426
+ Assert . Equal ( 0 , count ) ;
427
+ }
428
+ }
429
+
386
430
#region Lifetime tests
387
431
388
432
[ Theory ]
@@ -790,6 +834,18 @@ public GenericService()
790
834
}
791
835
}
792
836
837
+ // ReSharper disable once MemberCanBePrivate.Global
838
+ public interface IGenericService2 < T >
839
+ {
840
+ // ReSharper disable once UnusedMember.Global
841
+ T Get ( T arg1 ) ;
842
+ }
843
+
844
+ private class GenericService2 < T > : IGenericService2 < T >
845
+ {
846
+ public T Get ( T arg1 ) => arg1 ;
847
+ }
848
+
793
849
#endregion
794
850
}
795
851
}
0 commit comments