File tree 2 files changed +32
-1
lines changed
2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -68,7 +68,9 @@ export function initNgModule(data: NgModuleData) {
68
68
for ( let i = 0 ; i < def . providers . length ; i ++ ) {
69
69
const provDef = def . providers [ i ] ;
70
70
if ( ! ( provDef . flags & NodeFlags . LazyProvider ) ) {
71
- providers [ i ] = _createProviderInstance ( data , provDef ) ;
71
+ if ( providers [ i ] === undefined ) {
72
+ providers [ i ] = _createProviderInstance ( data , provDef ) ;
73
+ }
72
74
}
73
75
}
74
76
}
Original file line number Diff line number Diff line change @@ -883,6 +883,35 @@ function declareTests({useJit}: {useJit: boolean}) {
883
883
884
884
expect ( createModule ( MyModule ) . injector . get ( 'eager1' ) ) . toBe ( 'v1: v2' ) ;
885
885
} ) ;
886
+
887
+ it ( 'eager providers should get initialized only once' , ( ) => {
888
+ @Injectable ( )
889
+ class MyService1 {
890
+ public innerService : MyService2 ;
891
+ constructor ( injector : Injector ) {
892
+ // Create MyService2 before it it's initialized by TestModule.
893
+ this . innerService = injector . get ( MyService2 ) ;
894
+ }
895
+ }
896
+
897
+ @Injectable ( )
898
+ class MyService2 {
899
+ constructor ( ) { }
900
+ }
901
+
902
+ @NgModule ( {
903
+ providers : [ MyService1 , MyService2 ] ,
904
+ } )
905
+ class TestModule {
906
+ constructor ( public service1 : MyService1 , public service2 : MyService2 ) { }
907
+ }
908
+
909
+ const moduleRef = createModule ( TestModule , injector ) ;
910
+ const module = moduleRef . instance ;
911
+
912
+ // MyService2 should not get initialized twice.
913
+ expect ( module . service1 . innerService ) . toBe ( module . service2 ) ;
914
+ } ) ;
886
915
} ) ;
887
916
888
917
it ( 'should throw when no provider defined' , ( ) => {
You can’t perform that action at this time.
0 commit comments