gpt4 book ai didi

ember.js - Ember 将服务注入(inject) Ember 实用程序

转载 作者:行者123 更新时间:2023-12-02 05:40:55 29 4
gpt4 key购买 nike

我知道 Ember 有一个记录器,但我想创建自己的用于学习目的。我有一个名为 logger 的服务,我希望能够在任何地方使用这个服务。将此服务注入(inject)到组件、 Controller 等中没有问题...我无法弄清楚如何将此服务注入(inject)到我创建的实用程序中,而无需通过 create 函数传递它。我不想在创建实用程序的任何地方都传递我的记录器。当我尝试将其注入(inject)对象时,它提示不在容器中。最好的方法是什么?

最佳答案

好的,了解 Ember.inject.service 实际上做什么 很重要!它就像一个较短的版本:

myService: Ember.computed({
get() {
return Ember.getOwner(this).lookup('service:myService);
}
}),

那么这个 getOwner 是什么?它为您提供对象的所有者。您的大多数对象(如模型、 Controller 、组件、 View 等)都是由依赖注入(inject) (DI) 容器创建的。要使类在 DI 容器上可用,它必须是 registered .

您的默认类(如 Controller 、路由、 View )由解析器自动注册。注册后可以inject当它们被容器创建时,它们会自动进入其他类。所有者也被注入(inject)到由容器创建的所有实例中。

因为容器本身是私有(private)的,所以这些公共(public) API 在应用程序上。 getOwner 也会返回应用程序。

如果您想手动查找容器上的实例,您可以使用 lookup .

对于您的实用程序类,您可能使用普通的 .create() 来获取对象。这当然不会自动将其耦合到您的应用程序,因此所有者不可用。自动注入(inject)也不起作用。

您可以使用 ownerInjection 手动注入(inject)所有者。 :

myClass.create(Ember.getOwner(this).ownerInjection(), {...});

然后 Ember.inject.service 将起作用,因为 getOwner 将返回注入(inject)的所有者。

您可以做的另一件事是在容器上注册实用程序对象,然后查找它们。然后自动注入(inject)所有者。

关于ember.js - Ember 将服务注入(inject) Ember 实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843461/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com