Ember.js Ember JS自动向DI注册目录类

Ember.js Ember JS自动向DI注册目录类,ember.js,dependency-injection,Ember.js,Dependency Injection,在Ember.JS中的repo插件中创建,提供了很多可能性。今天我遇到了一个例子,我想将目录中的所有类(例如my dir)注册到依赖注入程序中(与Ember对服务的注册方式相同,但我想使用其他名称空间) 例如,我希望允许开发人员在proxy目录中创建多个类,并在proxy:命名空间下的DI中注册所有类。因此,稍后我们可以使用: Ember.Component.extend({ myProxy: Ember.inject('proxy:my'), }); 您需要使用初始值设定项来执行此操作。

在Ember.JS中的repo插件中创建
,提供了很多可能性。今天我遇到了一个例子,我想将目录中的所有类(例如
my dir
)注册到
依赖注入程序中(与Ember对
服务的注册方式相同,但我想使用其他名称空间)

例如,我希望允许开发人员在
proxy
目录中创建多个类,并在
proxy:
命名空间下的DI中注册所有类。因此,稍后我们可以使用:

Ember.Component.extend({
  myProxy: Ember.inject('proxy:my'),
});

您需要使用初始值设定项来执行此操作。有关这方面的详细信息,请参见:

最困难的部分可能是让s文件夹中的所有代理项自动注册

编辑 看来我没有花足够的时间考虑这件事。您至少应该能够轻松地完成其中的一部分。这有两个部分

第一部分 Ember当前使用
Ember解析器
处理各种项目的查找。如果检查冲突解决程序的测试,您会注意到您应该能够映射任何您想要的内容:

因此,在您的情况下,如果您从一个Ember实例化类(例如路由、控制器或组件)中执行
Ember.getOwner(this.lookup('proxy:main')
,它将查找您的插件可能正在填充的
app/proxy/main.js

有关
Ember.getOwner
查找的详细信息,请访问:

第二部分 因此,此时您可以查找代理(这在
init
方法中是可行的)。但如果我们想变得真正优雅,我们希望允许
Ember.inject.proxy('main')
语法

这样做需要在初始化器中调用
Ember.inject
内部的私有方法。由于该命名方案正在发生变化,因此尝试添加这种语法糖可能是不明智的


因此,我建议避免接触私有API,除非它对应用程序设计非常重要

我很熟悉初始值设定项和实例初始值设定项。我只是想知道是否有一个选项可以自动注册它们(例如,插件可以让应用程序使用给定的结构)。刚刚编辑了我的答案,看起来查找将很容易为您处理