更新(Angular 6 +)
シングルトンサービスを作成するための推奨方法が変更されました。@Injectableサービスのデコレータで「ルート」に提供するように指定することをお勧めします。これは私にとって非常に理にかなっており、モジュールで提供されているすべてのサービスを一覧表示する必要はもうありません。必要なときにサービスをインポートするだけで、適切な場所に登録されます。モジュールを指定して、モジュールがインポートされた場合にのみ提供されるようにすることもできます。
@Injectable({
  providedIn: 'root',
})
export class ApiService {
}
更新(Angular 2)
NgModuleで今それを行う方法は、サービスクラスを含む「CoreModule」を作成し、モジュールのプロバイダーにサービスをリストすることだと思います。次に、コアモジュールをメインアプリモジュールにインポートします。これにより、コンストラクターでそのクラスを要求するすべての子に1つのインスタンスが提供されます。
CoreModule.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ApiService } from './api.service';
@NgModule({
    imports: [
        CommonModule
    ],
    exports: [ // components that we want to make available
    ],
    declarations: [ // components for use in THIS module
    ],
    providers: [ // singleton services
        ApiService,
    ]
})
export class CoreModule { }
AppModule.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AppComponent } from './app.component';
import { CoreModule } from './core/core.module';
@NgModule({
    declarations: [ AppComponent ],
    imports: [
        CommonModule,
        CoreModule // will provide ApiService
    ],
    providers: [],
    bootstrap: [ AppComponent ]
})
export class AppModule { }
元の回答
にプロバイダーをリストする場合bootstrap()、コンポーネントデコレーターにリストする必要はありません。
import { ApiService } from '../core/api-service';
@Component({
    selector: 'main-app',
    templateUrl: '/views/main-app.html',
    // DO NOT LIST PROVIDERS HERE IF THEY ARE IN bootstrap()!
    // (unless you want a new instance)
    //providers: [ApiService]
})
export class MainAppComponent {
    constructor(private api: ApiService) {}
}
実際、「プロバイダー」にクラスをリストすると、その新しいインスタンスが作成されます。親コンポーネントがすでにリストしている場合、子は必要ありません。子がある場合、新しいインスタンスを取得します。
               
              
UserService及びFacebookServiceにproviders他のどこ?