typescript - Angular 4 (AOT) + Electron og betinget import
Ny til Angular/Typescript og jeg jobber med en tverrplattform Desktop-applikasjon ved bruk av Electron og Angular 4. Problemet jeg har er at jeg planlegger å bruke en Service i de forskjellige komponentene mine, men jeg vil at denne servicen skal lastes fra en annen fil avhengig av hvilken plattform applikasjonen kjører på.
Bare så du forstår hva jeg prøver å oppnå:
if (process.platform === 'darwin') { // Mac
import { MyService } from './path/to/the/mac/service/file';
} else if (process.platform === 'windows' { // Windows
import { MyService } from './path/to/the/windows/service/file';
}
Og det som plager meg er at jeg må bruke AOT-kompilering, så jeg kan ikke bruke require();
Jeg håper noen allerede har møtt denne typen problem og kunne peke meg i riktig retning.
Svar #1
dette ser ut som et godt sted å bruke en FactoryProvider så lenge begge tjenestene har det samme grensesnittet. Dette mønsteret fungerer med AOT i andre applikasjoner jeg har jobbet med.
import { FactoryProvider } from '@angular/core';
import { MyService as MySerivceWindows } from './path/to/the/windows/service/file';
import { MyService as MyServiceMac } from './path/to/the/mac/service/file';
export abstract class MyService{};
export function myFactoryProvider(){
if (process.platform === 'darwin') { // Mac
return new MyServiceMac();
}else{
return new MySeviceWindows();
}
}
const MY_SERVICE_PROVIDER: FactoryProvider = {
provide: MyService,
useFactory: myFactoryProvider
};
Du kan deretter importere og injisere abstrakt klasse inn i komponentene dine der det er nødvendig.
Det ville også sannsynligvis være best å gi prosessen og injisere den også i avhengighetene for fabrikken.
