javascript – 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 factory从原型中获取新实例.当你给create一个函数或构造函数模块时,它会调用它们.但是,如果您创建一个现有对象,它将使用Object.create来生成一个新实例,然后您可以像往常一样进一步配置(例如使用属性,init,建议等).请记住,它的工作方式与Object.create完全相同,因此将共享原型属性.
其次,你可以使用wire
factory来达到你想要的效果.您只需要将非单例包装在自己的线规范中.这是一个简单的例子:
thingThatNeedsATrackingService: {
create: 'my/ThingThatNeedsATrackingService',
properties: {
foo: { wire: 'my/trackingServiceSpec' }
}
},
otherThingThatNeedsATrackingService: {
create: 'my/OtherThingThatNeedsATrackingService',
properties: {
foo: { wire: 'my/trackingServiceSpec' }
}
},
//... more components
然后,在我的/ 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允许您从线规中导出特定组件,就像CommonJS导出一样.
这种方法有一些很好的好处,你可以在里面配置“私有”组件
my / trackingService.js也将根据需要创建,但只有trackingService可见.不利的一面是,将这样的原型组件分离成自己的线规有时需要做多少工作.
即将推出的wire.js版本将支持其他类型的组件范围,因此可以使某些情况更容易.
标签:javascript,inversion-of-control,ioc-container,wirejs 来源: https://codeday.me/bug/20190629/1323465.html