主要对象
new BPMN对象时,流程及对象结构如下图
依赖注入
在初始化bpmn对象时有传入additionalModules进行自定义操作,具体是如何实现这种模块化的管理,主要是用到了依赖注入https://github.com/nikku/didi。
继续查看bpmn实例对象发现有injector对象,该对象即类似java的ICO容器,容器负责实例化、定位、配置对象及建立这些对象间的依赖。对象主要开放get,invoke两个API,bpmn对象的get,invoke即指定injector对象的get ,invoke。
举个例子
如果要自定义pallete,代码大致如下
1.depends 显示声明依赖,在diagram.js中根据该依赖生成new injector需要的模块数组
2.init new injector创建容器后,并未执行constrnctor等方法,所以diggram.js根据该节点解析模块,执行模块方法
3.如customPallete构造时,获取到依赖注入的pallete对象,调用该对象的registerProvider注册当前的对象。pallete进行绘制操作时可以从注册的对象中获取各元素节点