2017-07-29 30 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