依赖注入适用于路由和控制器,但我很难使用自定义类。路由和控制器类的实例由Ember自动实例化,这可能是问题所在。下面的例子应该说明问题。我尝试在路由,控制器和自定义模型类中注入一个会话单例,它扩展了Ember.Object
。一切都适用于路由和控制器,但它不适用于自定义模型类。
问题可能是user
是使用App.User.create
创建的,因此它不是由应用程序的容器管理的吗?在控制台中,我创建了一个App.IndexRoute
的实例,并且该实例也没有注入会话。我在这里俯瞰什么?
要清楚,我已经查看过其他注册/注入示例(甚至是Ember源代码中的那些),但似乎我在Ember中缺少依赖注入的一个关键方面。
更新以下示例仅是一个示例来说明问题,因为人们不希望将会话单例注入每个用户模型。真正的问题是如果该实例不是由应用程序的容器创建的,如何将单例对象注入实例。
App = Ember.Application.create();
App.Session = Ember.Object.extend({
user: 'defaultUser'
});
App.User = Ember.Object.extend({
first: '',
last: ''
});
App.initializer({
name: 'session',
initialize: function(container, application) {
application.register('session:main', App.Session);
application.register('model:user', App.User, { singleton: false });
application.inject('route', 'session', 'session:main');
application.inject('controller', 'session', 'session:main');
application.inject('model:user', 'session', 'session:main');
}
});
App.IndexRoute = Ember.Route.extend({
setupController: function(controller, model) {
this._super(controller, model);
var user = App.User.create({
first: 'bart',
last: 'jacobs'
});
console.log(this.get('session')); // returns `session` singleton
console.log(controller.get('session')); // returns `session` singleton
console.log(user.get('session')); // returns `undefined`
}
});
答案 0 :(得分:1)
你是现实,这是因为你正在创建模型,而不是处理DI的容器。