Ember 将服务注入 Ember 实用程序

2024-01-28

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


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

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

那么这是什么getOwner?它为您提供了对象的所有者。大多数对象(例如模型、控制器、组件、视图等)都是由依赖注入 (DI) 容器创建的。要使类在 DI 容器上可用,它需要是挂号的 http://emberjs.com/api/classes/Ember.Application.html#method_register.

您的默认类(如控制器、路由、视图)由解析器自动注册。注册后您可以inject http://emberjs.com/api/classes/Ember.Application.html#method_inject当容器创建它们时,它们会自动添加到其他类中。所有者也被注入到容器创建的所有实例中。

因为容器本身是私有的,所以这些公共API都在Application上。 getOwner 还返回该应用程序。

如果您想手动查找容器上的实例,您可以使用lookup http://emberjs.com/api/classes/ContainerProxyMixin.html#method_lookup.

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

您可以手动向所有者注入所有者注入 http://emberjs.com/api/classes/ContainerProxyMixin.html#method_ownerInjection:

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

Then Ember.inject.service会起作用,因为 getOwner 将返回注入的所有者。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ember 将服务注入 Ember 实用程序 的相关文章

随机推荐

  • Safari 和 Firefox 中的 HTML5 视频(mp4 和 ogv)问题 - 但 Chrome 一切正常

    我有以下代码
  • 调整非特权帐户上的令牌(C、Windows)

    我使用以下代码 这是 MSDN 中的示例 稍加修改 来检查我是否对进程具有调试权限 如果我不这样做 我会尝试设置它们 int SetDebugPriv HANDLE TokenHandle LUID lpLuid TOKEN PRIVILE
  • 远程 SSH 无法从终端打开文件

    VS Code 版本 Visual Studio Code 1 48 2 什么类型的远程连接 SSH 操作系统 Ubuntu 16 04 7 LTS Xenial Xerus 远程操作系统 Ubuntu 16 04 7 LTS Xenial
  • 多个进程访问 Django db 后端;直到手动调用 _commit 后才会显示记录

    我有一个 Django 项目 其中多个进程正在访问后端 mysql 数据库 一个进程正在创建记录 而第二个进程正在尝试读取这些记录 我遇到一个问题 在我手动调用 connection commit 之前 尝试读取记录的第二个进程实际上无法找
  • Amazon SNS 同一终端节点的多个订阅

    我注意到 如果我尝试在主题和 SQS 队列之间创建订阅两次 Amazon 实际上只创建一个订阅 aws sns subscribe topic arn arn aws sns ap southeast 2 909420746768 bar
  • Youtube 播放器 JS APIeekTo 函数不起作用

    我正在尝试通过 JS API 使用 Youtube chromeless 播放器 但我遇到了eekto 函数的问题 问题是 有时 我无法判断问题何时出现 向后调用eekTo 函数到视频中未加载的点不会返回 而是停留在当前时间 这就是我所做的
  • 需要帮助使用 ASP.NET MVC2 调试基于 XHR 的 Ajax 图像上传

    我正在尝试使用从中找到的脚本http valums com ajax upload http valums com ajax upload 我的控制器如下 using System using System IO using System
  • 为什么在 R 中编写包时 message() 比 print() 更好?

    我希望知道为什么message 是一个更好的选择print 当涉及到打印诊断消息时 例如 print 函数是打印 R 对象的更好选择 例如 iris 然而 message 当我们想要连接字符串时 例如message a b 短于print
  • 我们如何在流式传输后缓存 HLS 视频 url

    我正在使用 exomedia 库通过 hls 播放视频 我想在视频流式传输时缓存视频 AndroidVideoCache 库很好地完成了这项工作 但它不支持 HLS 可以通过配置使用的okhttp客户端来完成外媒体 https github
  • Jasper 报告 - 柬埔寨语/高棉语和老挝语

    我正在使用 Arial Unicode MS 在 jasper 报告中显示中文 俄语 韩语和越南语 并使用 Identity H 进行 Pdf 编码将它们导出为 pdf 但是 我不能将其用于柬埔寨语 高棉语和老挝语 I 我尝试过搜索字体 但
  • 从socket读取json字符串

    我有一个java服务器 我正在编写服务器从客户端读取命令 C 编写的客户端通过socket以json字符串的形式发送命令 该命令看起来像这样 command blah key1 value1 key2 value3 key3 value4
  • 何时使用shared_ptr,何时使用原始指针?

    class B class A public A m b new B shared ptr b GimmeB return m b private shared ptr b m b 假设 B 是一个在语义上不应该存在于 A 生命周期之外的类
  • SQL:存储指南

    我现在有一个要求 必须将一列添加到包含唯一 ID guid 的表中 该ID用于匹配不同表和数据库中的记录 但不会有FK约束 将 guid 存储为 varchar 32 还是 uniqueidentifier 类型会更好吗 将使用此列完成连接
  • 使用 .NET Core WebApp 访问 AWS ElasticBeanstalk 自定义环境变量

    我们已在 Elastic Beanstalk 仪表板中的配置 gt 软件配置 gt 环境属性 部分下设置自定义环境变量 在 C MVC 5 项目中 我们可以通过使用 ConfigurationManager AppSettings 查找这些
  • 执行存储过程并返回结果集

    我是一个完整的 VBScript 新手 我正在尝试执行存储过程并读取结果集 我使用在线文章尝试了多种不同的方法 但没有任何效果 我很困惑 数据库是 SQL Server 2008 R2 应用程序是现成的 ERP 系统 但我可以向其中添加自己
  • 了解 Javascript D3 可视化四叉树

    我正在尝试使用和理解D3可视化库 http mbostock github com d3 http mbostock github com d3 我正在看他们的原力导向代码 https github com mbostock d3 blob
  • ViewPager setCurrentItem 冻结 UI 线程

    我正在使用 Android 支持 v13 中的 ViewPager 并且我想使用以下命令滚动到特定项目setCurrentItem int 但是当我尝试滚动超过 2 页时 应用程序会冻结 几秒钟后系统会显示 ANR 窗口 我尝试使用增加屏幕
  • IE11 中的弹性项目包装被破坏

    我正在尝试使用新的 CSS3 Flexbox 功能构建表单布局 目标是当您更改字段集中的元素数量 更改字体大小或更改视图大小时 字段集的元素可以正确排列 表单布局应该适用于所有现代浏览器 Chrome 35 Firefox 29 和IE 1
  • 使用 iOS 定义的本地化在导航栏上获取一个显示“后退”的后退按钮

    我有一个UINavigationBar有两个不同的屏幕 在两个屏幕上 导航栏具有相同的标题 所以后退按钮应该只是Back作为文本而不是导航栏的标题 如果我将父 ViewController 标题设置为nil我有一个带有文本的后退按钮Back
  • Ember 将服务注入 Ember 实用程序

    我知道 Ember 有一个记录器 但我想创建自己的记录器以用于学习目的 我有一个名为 logger 的服务 我希望能够在任何地方使用该服务 我可以毫无问题地将此服务注入到组件 控制器等中 我无法弄清楚如何将此服务注入到我创建的实用程序中 而