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