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();
我希望有人已经遇到过这种问题,并指出了正确的方向。
答案 0 :(得分:0)
只要两个服务具有相同的接口,这似乎是使用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中。