我知道Ember有一个记录器,但我想创建自己的记录器用于学习目的.我有一个名为logger的服务,我希望能够在任何地方使用此服务.我没有问题将此服务注入组件,控制器等...我无法弄清楚如何将此服务注入到我创建的实用程序中而不通过create函数传递它.我不想在创建实用程序的任何地方都通过我的记录器.当我试图将它注入对象时,它抱怨不在容器中.最好的方法是什么?
好的,了解Ember.inject.service实际做的很重要!它就像一个较短的版本:
myService: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:myService);
}
}),
Run Code Online (Sandbox Code Playgroud)
这是什么getOwner?它为您提供了Object的所有者.大多数对象(如模型,控制器,组件,视图等)都是由依赖注入(DI)容器创建的.要在DI容器上提供类,需要注册.
您的默认类(如控制器,路径,视图)将由解析程序自动注册.注册后,您可以在容器创建它们时自动将它们注入其他类.此外,在容器创建的所有实例中注入所有者.
由于容器本身是私有的,因此这些公共API位于Application上.getOwner也返回应用程序.
如果要手动查找容器上的实例,可以使用查找.
对于您的实用程序类,您可能使用法线.create()来获取对象.这当然不会自动将其耦合到您的应用程序,因此所有者不可用.自动注射也不起作用.
您可以使用ownerInjection手动注入所有者:
myClass.create(Ember.getOwner(this).ownerInjection(), {...});
Run Code Online (Sandbox Code Playgroud)
然后Ember.inject.service将工作,因为getOwner将返回注入的所有者.
您可以做的另一件事是在容器上注册您的实用程序对象,然后查找它们.然后自动注入所有者.
| 归档时间: |
|
| 查看次数: |
1600 次 |
| 最近记录: |