As per the final version of Angular 2, services provided by a module are available to every other module that imports it.
The Official Style Guide advice that application-wide services (singletons) that are to be reused anywhere in the application should be provided by some Core Module
, that is to be imported in the main App Module
so it would be injectable everywhere.
If you do not use a structure that involves a Core Module with shared singletons, and you are independently developing two NgModules, and you want a service in one of them to be used in the other, then the only solution is to import the provider into the other :
Here's the provider module:
/// some.module.ts
import { NgModule } from '@angular/core';
import { SomeComponent } from './some.component';
@NgModule({
imports: [],
exports: [],
declarations: [SomeComponent],
providers: [ MyService ], // <======================= PROVIDE THE SERVICE
})
export class SomeModule { }
Here's the other module, that wants to use MyService
/// some-other.module.ts
import { NgModule } from '@angular/core';
import { SomeModule } from 'path/to/some.module'; // <=== IMPORT THE JSMODULE
import { SomeOtherComponent } from './some.other.component';
@NgModule({
imports: [ SomeModule ], // <======================== IMPORT THE NG MODULE
exports: [],
declarations: [SomeOtherComponent],
providers: [],
})
export class SomeOtherModule { }
This way, the service should be injectable in any component SomeOtherModule
declares, and in SomeModule itself - just ask for it in the constructor:
/// some-other.module.ts
import { MyService } from 'path/to/some.module/my-service';
/* ...
rest of the module
*/
export class SomeOtherModule {
constructor( private _myService: MyService) { <====== INJECT THE SERVICE
this._myService.dosmth();
}
}
If this doesn't answer your question, I invite you to re-formulate it.
@NgModule()
. Services provided in@NgModule()
are shared with the whole application and therefore also with all modules in your application (except when the module where you provide the service is lazy loaded). – Innocuous