何かが動作するはずです:
{ provide: <ServiceA>, useClass: <ServiceB>, deps: [<IMPORTANT for AoT>] }
またはあなたの中にすべての依存関係を一覧表示することを確認します
const FirebaseProviders = [
{ provide: AuthService, useClass: FirebaseAuthService },
{ provide: ConnectionService, useClass: FirebaseConnectionService },
{ provide: CrudService, useClass: FirebaseCrudService },
{ provide: ErrorHandler, useClass: FirebaseErrorHandler, deps: [DataService, Store] },
{ provide: StorageService, useClass: FirebaseStorageService },
];
const MockProviders = [
{ provide: AuthService, useClass: MockAuthService },
{ provide: ConnectionService, useClass: MockConnectionService },
{ provide: CrudService, useClass: MockCrudService },
{ provide: ErrorHandler, useClass: AppErrorHandler, deps: [Store] },
{ provide: StorageService, useClass: StorageService },
];
const CoreProviders = environment.production ? FirebaseProviders : MockProviders;
@NgModule({
...
providers: [
...CoreProviders,
DataService
]
})
export class CoreModule {}
:
// service used in components/other services
export class DataService<T> {
constructor(
private connectionService: ConnectionService,
private crudService: CrudService,
private storageService: StorageService,
private store: Store<AppState>) {}
}
を、あなたはモジュールレベルの異なる実装を提供することができます厄介な(デバッグするのが難しい)AoTエラーになります。
私は質問で明確にすべきでした。適切なプロバイダセットをロードするだけでは不十分です。プロバイダのサイズは重要ではないので、両方のセットのコードをロードする必要はありません。おそらく遅延ロードまたはデフォルトのビルドツールに結びついたメソッドが必要ですそれはAJAXプロバイダがコードバを必要とするときにはロードされません。特に、コードバプロバイダが通常のウェブサイトである場合はロードされません。 – taxilian
プロダクションビルドでツリーシェイキングを行うCLIを使用します。例えば、 'const DEV_MODULES = environment.production? []:[DevModule] 'を呼び出してDEV_MODULESをインポートすると、バンドルサイズは開発モードでは+15.93KB **、実動では+ 80B **です。あなたはAjaxModule/CordovaModuleをセットアップし、環境に基づいてそれらをロードすることができます。 – Sasxa
両方のケースでシングルビルドをしたい場合は、遅延ロードを使用してプロバイダを設定できます。 – Sasxa