2017-07-29 87 views
2

Angular/Typescript的新手和我正在研究一个使用Electron和Angular 4的跨平台桌面应用程序。 我遇到的问题是我计划使用Service我的不同组成部分,但我希望从一个不同的文件在不同平台上的应用程序运行Angular 4(AOT)+电子和条件导入

只要你明白我想要实现这个加载服务:

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

通常的做法是导入它们并在它们之间切换。 – estus

回答

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 
}; 

然后,您可以在需要时将抽象类导入并注入组件。

它也可能是最好的提供的过程,并注入它在工厂的代表。

+0

好吧,在阅读了更多关于这个主题后,为了实现我正在尝试做的事情,无论我用什么方法在两者之间切换,我都需要导入它们。谢谢您的意见 ;) – Driss