我创建了一个Angular 2库,用于帮助创建工作流/状态机。我的问题是我不能在我的应用程序中为每个工作流创建多个WorkflowService实例。
它封装在自己的模块中,消费者可以import
加入ngModule
,如此:
@NgModule({
imports: [
WorkflowModule.forWorkflow({
name: 'Turnstile',
initialStage: 'Locked',
transitions: [
{
name: 'Coin',
from: ['Locked', 'Unlocked'],
to: 'Unlocked',
},
{
name: 'Push',
from: 'Unlocked',
to: 'Locked'
}
]
})
],
exports: [WorkflowModule]
})
export class TurnstileWorkflowModule {}
在内部,forWorkflow
方法如下所示:
static forWorkflow(config: WorkflowConfig): ModuleWithProviders {
return {
ngModule: WorkflowModule,
providers: [
{ provide: WORKFLOW_CONFIG, useValue: config },
{ provide: WorkflowService, useClass: WorkflowService },
]
};
}
此当前设置的问题在于它不允许我拥有WorkflowService
的多个实例。如何重新配置它以为每个消费者提供多个实例?
谢谢!
更新: 感谢@jonrsharpe的帮助。我已经更新了代码,但现在我的应用程序无法使用AOT进行编译。
这是代码的样子:
export class WorkflowProvider {
public static forWorkflow(config: WorkflowConfig): Provider {
return {
provide: WorkflowService,
useValue: workflowFactory(config),
deps: [Injector]
};
}
}
工厂:
export function workflowFactory(config: WorkflowConfig) {
return function (injector: Injector) {
return new WorkflowEngine(config, injector);
};
}
我收到的错误:
错误中的错误:静态解析符号值时出错。 不支持函数调用。考虑更换功能或 lambda引用了一个导出的函数(位置9:10) 原始.ts文件),解析符号workflowFactory