Tìm kiếm trang web

typescript - Angular 4 (AOT) + Electron và nhập điều kiện


Mới làm quen với Angular/Typescript và tôi đang phát triển một ứng dụng Desktop đa nền tảng sử dụng Electron và Angular 4. Vấn đề tôi gặp phải là tôi dự định sử dụng một Service trong các component khác nhau của mình nhưng tôi muốn Service này được tải từ một file khác tùy thuộc vào nền tảng mà ứng dụng đang chạy

Chỉ để bạn hiểu tôi đang cố gắng đạt được điều gì:

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

Và điều làm tôi khó chịu là tôi cần sử dụng biên dịch AOT, nên tôi không thể dùng require();

Tôi hy vọng có ai đó đã từng gặp phải loại vấn đề này và có thể chỉ cho tôi hướng đi đúng đắn.

Câu trả lời #1

Điều này dường như là một nơi tốt để sử dụng FactoryProvider miễn là cả hai dịch vụ đều có cùng một giao diện. Mẫu này hoạt động với AOT trong các ứng dụng khác mà tôi đã làm việc.

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

Bạn sau đó có thể nhập và tiêm lớp trừu tượng vào các thành phần của bạn khi cần.

cũng có lẽ sẽ tốt nhất nếu cung cấp quy trình và tiêm nó vào trong các dependency cho nhà máy.