Dependency injection 使用RequireJs的依赖项注入或服务位置
我有点困惑我应该如何用RequireJs实例化我的对象。我正在使用coffeescript类,它将所有对象定义为类型化函数?(不确定术语是否正确) 目前,我正在为自己的对象使用依赖项注入,下面是一个示例viewModel和服务 我通过一个选项数组将服务注入构造函数中的视图模型Dependency injection 使用RequireJs的依赖项注入或服务位置,dependency-injection,coffeescript,requirejs,jasmine,service-locator,Dependency Injection,Coffeescript,Requirejs,Jasmine,Service Locator,我有点困惑我应该如何用RequireJs实例化我的对象。我正在使用coffeescript类,它将所有对象定义为类型化函数?(不确定术语是否正确) 目前,我正在为自己的对象使用依赖项注入,下面是一个示例viewModel和服务 我通过一个选项数组将服务注入构造函数中的视图模型 define 'myViewModel', [ 'jquery', 'sammy' ], ( $, sammy ) -> class myViewModel constructor: ( options
define 'myViewModel', [ 'jquery', 'sammy' ], ( $, sammy ) ->
class myViewModel
constructor: ( options ) ->
self = @
@service = options.service
@router = sammy( ->
@get( '/SomeRoute#:id', self.onHashUpdated )
)
@router.run()
在这里,我将alertId注入到服务中
define 'myService', ['baseService'], ( baseService ) ->
class myService extends baseService
constructor: ( options ) ->
@alertId = options.alertId
super()
这是我的高级页面对象。我进行视图模型实例化,并将所有必需的依赖项注入视图模型
require [ 'myViewModel', 'myService', 'domReady!' ], ( viewModel, service ) ->
myViewModelInstance = new viewModel
service: new service
alertId: 'some-alert-id'
我只是不确定我是应该这样做,还是应该从服务定义返回一个新的服务,使其成为一个单例
所有其他依赖项,如jquery
,sammy
,knockout
都是这样工作的,并从require
返回工作对象,而不是像我的对象那样需要实例化的类型
使用requireJs是否有公认的模式
我应该做依赖注入还是服务定位
这将导致测试javascript并找到一个库,该库可以覆盖requireJs并返回模拟对象,而不是真正的依赖项 在《茉莉花》中,我可能会有这样的东西
describe '=== my view model ===', ->
sut = null
beforeEach ->
require ['myViewModel', 'mockService'], ( viewModel, mockService ) ->
sut = new viewModel
service: new mockService
我试过了,但是文档非常糟糕,而且没有任何完整的例子说明如何使用它
看起来这种事情也有可能发生?我选择了以下内容,让每个对象实例化它自己的依赖项
define 'myService', ['baseService', 'alert'], ( baseService, alert ) ->
class myService extends baseService
constructor: ( options ) ->
super()
@alertId = new alert
然后在测试模块时使用squire js注入sinon js Mock