I have a service in sub-module that wraps some third-party module, instantiates and initializes its service to prepare for use within app.
@Injectable()
class SubmoduleInitializerService {
constructor (thirdPartyService: ThirdPartyService) {
thirdPartyService.initialize(...);
...
}
}
@NgModule({
imports: [ThirdPartyModule],
exports: [ThirdPartyModule],
providers: [
ThirdPartyService,
SubmoduleInitializerService
]
})
class AppSubmodule {}
ThirdPartyService
isn't injected in app directly but is used by other ThirdPartyModule
units, so as long as SubmoduleInitializerService
is injected in the same injector as ThirdPartyService
or parent injector, everything is fine:
export class AppComponent {
constructor(
/* DO NOT REMOVE! BAD THINGS HAPPEN! */
submoduleInitializerService: SubmoduleInitializerService
) {}
...
}
It was proven to be a lousy pattern because it is not obvious why SubmoduleInitializerService
should stay injected in AppComponent
if it's not used neither in class nor in template (was accidentally removed once already).
Basically AppSubmodule
module needs an alternative to Angular 1.x angular.module(...).run(...)
block.
What are the options here?