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.
