Angular 4中的多个提供程序实例

时间:2017-10-18 15:15:30

标签: angular

我创建了一个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

0 个答案:

没有答案