2017-03-25 431 views
1

我正在構建一個使用TypeScript的Aurelia Web應用程序,並考慮到模塊化。我的意思是,應用程序的每個部分都應該是獨立的,以便將來的維護更容易。Aurelia中的模塊化依賴註冊

最近幾天導致我頭疼的是我無法弄清楚如何以(更多)模塊化方式註冊我的依賴關係。我的意思是用代碼很容易就能說明問題。

例如,我有以下的接口在我的應用程序:

此接口的
export interface HeaderItem { 
    name: string; 
    url: string; 
} 

實現我的應用程序的最頂部導航部分顯示出來。這個想法是,如果應該添加新的頂層部分,開發人員只需實現接口並將實現註冊到容器。

我的導航組件的代碼使用@all注射的,看起來像這樣:

export class Header { 
    headerItems: any[] = []; 

    constructor(@all('HeaderItem') private _headerItems : any[]){ 
    this.headerItems = _headerItems; 
    } 
} 

所以每次與HeaderItem鍵註冊類型會從容器中得到解決。

讓我困擾的是,接口的每一個實現了在main.ts文件要註冊這樣的:

aurelia.container.registerSingleton('HeaderItem', BatchHeaderItem); 

我不喜歡這樣。我正在尋找的是一種方式,每個模塊都可以註冊其依賴項。我只想在main.ts文件中註冊ModuleConfiguration類。

但是,到目前爲止我嘗試的是我創建了一個Module接口併爲我擁有的模塊實現它。然後我嘗試在配置方法中使用new創建實例,導致完全白屏。我不知道這是爲什麼發生?!

我也試過的是,我註冊了容器的Module實現,並在configure方法中解析它,然後試圖調用一個方法,當然,它也沒有按預期工作。

您是否知道更好的方法來使用內置的Aurelia依賴注入機制來分離組件的註冊以適合更模塊化的方法?

回答

0

您是否嘗試過注入Aurelia本身並註冊您的模塊,像這樣的服務?

import { autoinject } from 'aurelia-framework' 
import { Aurelia } from 'aurelia-framework' 

@autoinject() 
export class MyModule { 
    constructor(
    private aurelia: Aurelia 
) { 
    this.init(); 
    } 

    private init(){ 
    this.aurelia.container.registerSingleton(...register what you want...); 
    } 
} 
+0

MyModule類如何註冊或自行調用?正如我在我的問題中提到的那樣,問題的根源在於我無法實例化並調用在啓動時註冊某些內容的組件。屏幕保持白色。控制檯沒有什麼 –

+0

您可以在main.ts中導入和編寫'aurelia.container.get(MyModule);'來自動調整您的模塊。創建一個小回購,我們可以一起工作。 – zedL

+0

這些信息也可能非常有用=> https://github.com/dryajov/aurelia-factory-methods – zedL