在我的应用程序中,我已使用初始化程序将服务注入到路由,控制器和组件。我现在正在尝试使用余烬引擎。我已经向引擎共享了应用程序服务,但是我需要使用初始化程序将共享的应用程序服务注入引擎的路由,控制器和组件。
在我的应用程序中,我可以生成一个初始化程序并注入服务。如何在我的引擎中做到这一点?
答案 0 :(得分:2)
此命令应在in-repo-engine下的适当文件夹中创建初始化程序:
ember g initializer <init-name> -ir <engine-name>
理想地,最好将服务注入到控制器/路由/组件中,如其他答案所述。
引用:https://guides.emberjs.com/release/applications/dependency-injection/#toc_ad-hoc-injections
答案 1 :(得分:1)
将其注入所需的位置可能要容易得多,而不是随处注入。
来自Ember Docs的示例:
import Component from '@ember/component';
import { inject as service } from '@ember/service';
export default Component.extend({
shoppingCart: service()
});
这将在此处提供购物车服务。您可以在路由和控制器中执行相同的操作,并且该服务是单例,因此它将仅被实例化一次,并且在每个访问位置之间共享状态。
这避免了完全创建引擎特定的初始化程序的麻烦。
答案 2 :(得分:0)
我实际上发现,可以将引擎的初始化程序配置为类似于应用程序的初始化程序。可以在lib/<engine>/addon/initializers
目录中指定。
如果要向路由,组件和控制器注入服务,则必须首先按照engine docs中的说明将服务从应用程序共享到引擎。