ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – wirejs – 每个依赖组件的新组件实例

2019-06-29 05:32:40  阅读:309  来源: 互联网

标签:javascript inversion-of-control ioc-container 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有