首先:我是新的wirejs,很有可能我错过了文档上的东西
在常规组件声明中,例如:
'Bnaya/App/TrackingService': {
create: {
module: 'Bnaya/App/TrackingService',
args: []
}
}
使用$ ref取决于该组件的所有组件都将获得相同的实例,因此电线也将是一种单身机制(在大多数情况下对我来说对我有好处)
在某些情况下,我希望每个依赖者都会使用相同的组件配置获得自己的组件实例。
'Bnaya/App/TrackingService': {
create: {
module: 'Bnaya/App/TrackingService',
args: [],
notASingleton: true
}
}
我知道如何使用多个组件名称或实例创建类似的结果,但是我要避免的结果。
谢谢!
有几种方法可以在Wire.js中创建多个组件实例。根据您的需求,您可以看到哪种可能对您有用。
首先,您可以使用create
工厂从原型中获取新实例。当您给create
一个函数或构造函数模块时,它将调用它们。但是,如果您给create
现有对象,它将使用Object.create
来确定一个新实例,然后您可以像往常一样进一步配置(例如,使用properties
,init
,建议等)。请记住,它的工作原理与Object.create
完全一样,因此将共享原型属性。
第二,您可以使用wire
工厂来实现您追求的效果。您只需要按照自己的电线规格包裹非单星即可。这是一个快速示例:
thingThatNeedsATrackingService: {
create: 'my/ThingThatNeedsATrackingService',
properties: {
foo: { wire: 'my/trackingServiceSpec' }
}
},
otherThingThatNeedsATrackingService: {
create: 'my/OtherThingThatNeedsATrackingService',
properties: {
foo: { wire: 'my/trackingServiceSpec' }
}
},
//... more components
,然后在my/trackingService.js
中:
// Export the trackingService instance
$exports: { $ref: 'trackingService' },
trackingService: {
create: {
module: 'Bnaya/App/TrackingService',
args: []
}
},
//... more components if you need
将把Bnaya/App/TrackingService
的新实例注入需要的两件事。$exports
允许您从电线规格中导出特定的组件或组件,就像COMPORJS exports
。
这种方法具有一些不错的好处,您可以在内部配置"私有"组件 my/trackingService.js
也将根据需要创建它们,但只能看到trackingService
。不利的一面是,将这样的原型组件分离为自己的电线规格有时会有更多的工作。
即将发布的Wire.js版本将支持其他类型的组件示波器,因此将使某些情况更容易。