我是Angular/Typescript的新手,我正在使用Electron和Angular 4开发一个跨平台的桌面应用程序。我遇到的问题是,我计划在我的不同组件中使用服务,但我希望根据应用程序运行的平台,从不同的文件加载此服务
为了让你明白我想要达到的目的:
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';
} 而困扰我的是,我需要使用AOT编译,所以我不能使用require();
我希望已经有人遇到过这样的问题,可以给我指出正确的方向。
发布于 2017-07-30 08:43:36
只要两个服务具有相同的接口,这似乎就是一个使用FactoryProvider的好地方。在我工作过的其他应用程序中,此模式适用于AOT。
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
};然后,您可以在需要的地方导入和注入抽象类到组件中。
最好也提供流程并将其注入到工厂的deps中。
https://stackoverflow.com/questions/45394753
复制相似问题