我正在使用 TypeScript 构建Aurelia Web应用程序,并考虑到模块化。我的意思是应用程序的每个部分都应该是独立的,以便将来维护更容易。
过去几天让我头疼的是我无法弄清楚如何以(更多)模块化的方式注册我的依赖关系。我的意思是最容易用代码来说明。
例如,我的应用程序中有以下界面:
export interface HeaderItem {
name: string;
url: string;
}
此界面的实现显示在我的应用程序的最顶层导航部分。我们的想法是,如果应该添加一个新的顶级部分,开发人员只需实现HeaderItem
接口并将实现注册到容器中。
我的导航组件的代码使用了@all
注入,如下所示:
export class Header {
headerItems: any[] = [];
constructor(@all('HeaderItem') private _headerItems : any[]){
this.headerItems = _headerItems;
}
}
因此,使用HeaderItem
键注册的每个类型都将从容器中解析。
困扰我的是界面的每个实现都必须在main.ts
文件中注册,如下所示:
aurelia.container.registerSingleton('HeaderItem', BatchHeaderItem);
我不喜欢那样。我正在寻找的是每个模块都可以注册其依赖关系的方式。我可以在ModuleConfiguration
文件中注册main.ts
类。
然而,到目前为止我尝试的是我创建了一个Module
接口并为我拥有的模块实现了它。然后我尝试在configure方法中使用new
创建一个实例,这会导致完全白屏。我不知道为什么会这样??
我还尝试过,我在容器中注册Module
实现并在configure方法中解析它,然后尝试在其上调用一个方法,当然,这也没有按预期工作。
您是否了解使用内置Aurelia依赖注入机制分离组件注册以更适合更模块化方法的更好方法?
答案 0 :(得分:1)
您是否尝试过注入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...);
}
}