私がこのコントローラーを持っているとしましょう
MyApp.LayoutFooterController = Ember.ObjectController.extend
formData:
name: null,
phone: null,
message: null
cleanFormData: ->
@set('formData.name', null)
@set('formData.phone', null)
@set('formData.message', null)
send: () ->
@container.lookup('api:contact').send(
@get('formData.name'),
@get('formData.phone'),
@get('formData.message')
)
@cleanFormData()
このために、サービスクラスを作成しました
MyApp.Api ||= {}
MyApp.Api.Contact = Ember.Object.extend
init(@$, @anotherDep) ->
send: (name, phone, message) ->
console.log name, phone, message
および初期化子
Ember.Application.initializer
name: 'contact'
initialize: (container, application) ->
container.register 'api:contact', MyApp.Api.Contact
init(@$, @anotherDep)
問題は、 Ember コンテナーを介してサービス クラスの依存関係を解決できるようにコンテナーを設定する方法がわからないことです。
Ember.js 依存性注入 (またはサービス ロケーターだと思います) コンテナーを使用して他のライブラリやオブジェクトを注入する方法を説明してもらえますか?
たぶん、私はそれをまったくうまくやっていないということです。
編集
Ember のコンテナー ソース コードを調べたところ、解決策が見つかりました。
Ember.Application.initializer
name: 'contact'
initialize: (container, application) ->
container.register 'api:contact', { create: () -> new MyApp.Api.Contact(application.$) }
しかし、これはきれいですか?