如果 Aurelia 理解“导入”,为什么还要使用依赖注入?

2024-04-10

我不明白..如果我可以使用import在 Aurelia 中,为什么我必须将构造函数与@autoinject()还有这一切?我确信我错过了一些东西,但是,据我所知,我可以随时使用导入的模块。

import something from "whatever"

export class SomeViewModel {
    activate() {
        // use something
    }
}

通常,在 Aurelia 应用程序中,您是importing 不是一个实例Something这是班级Something。实际使用已经存在的东西imported,你需要它的一个实例。

import Something from 'whatever';

let something = new Something();

当您使用 Aurelia 的依赖注入系统时,您正在利用一种称为“控制反转”的设计模式。它不是由您的类(或您)负责实例化其依赖项,而是列出它具有的依赖项,然后将依赖项的实例注入到其构造函数中。

这有助于提高可测试性,因为现在您可以将依赖项的模拟实例传递给测试装置中的类(请注意,在测试中,您的测试会将模拟传递给构造函数,而不依赖于 Aurelia 的 DI 容器)。这也允许您利用依赖注入容器的功能进行配置,以使用不同的对象生活方式(例如单例和瞬态)创建依赖项。

--- 编辑回答OP的评论问题 ---

如果我将定义为导出默认类 Something 的模块导入到 aurelia 视图模型使用构造函数注入,它不需要 实例化。它是 Something 类的一个实例。

这是因为 Aurelia 的依赖注入容器正在为您实例化一个实例。这就是为什么你的代码看起来像这样:

import {inject} from 'aurelia-framework';
import Something from 'somewhere';

@inject(Something)
export class Foo {
  constructor(something) {
    this.something = something;
  }
  //...
}

and not

import Something from 'somewhere';
export class Foo {
  constructor(Something) {
    this.something = something;
  }
  //...
}

你告诉奥里莉亚“我需要其中一件,请给我”,奥里莉亚说“当然,我已经创造了一个,或者我已经有一个了,就在这里。”

换句话说,看起来 aurelia 的构造函数 DI 只能工作 使用类导出,并且它确实实例化了该类。看起来像 如果我想将 moment js 之类的东西导入到我的 aurelia 视图中 模型,我应该继续按照我一直做的方式做事 他们(不使用 aurelia 的 DI)。这听起来正确吗?

这是对的。图书馆喜欢moment为您提供一个要使用的函数,而不是一个可以由 Aurelia 实例化的类。对于这些,您将像过去一样继续使用它们。

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

如果 Aurelia 理解“导入”,为什么还要使用依赖注入? 的相关文章

  • 使用 aurelia-fetch-client 发布“x-www-form-urlencoded”内容

    问题很简单 如何发帖x www form urlencoded对 Aurelia Fetch 客户端满意吗 我需要将帖子发送到一个使用 OWIN 和 Katana 进行身份验证的简单 ASP NET Web API 服务器 我已经尝试过的一
  • 如何使用 vs2017rc 创建 aurelia typescript 项目

    我是 aurelia 的新手 我需要创建一个框架的原型项目 一开始 我打算使用 sculpture typescript aspnetcore 框架 但是当我尝试 vs2017rc 时 我发现它使用 csproj 作为默认格式 而 vs20
  • ES6 和 Promise 内的变量作用域

    不知道我在这里缺少什么 我需要得到的输出data into this contact 现在 我正在使用静态类变量 但必须这样做似乎很脏 export class contactEdit static t static class var c
  • Aurelia 动态绑定

    我创建了一个生成表格数据的自定义元素 出于充分的理由 这会生成实际的 HTML 并插入到 DOM 中 而无需使用模板 我需要将点击观察器附加到特定元素 以便我可以在自定义元素中运行函数来响应点击 如果使用模板 我会使用 click dele
  • 如何使用 Aurelia/Typescript 导入 Moment-Timezone

    我已经正确导入了 momentjs 它工作正常 但是当我尝试导入时刻时区时 我无法让它工作 我无权访问任何功能 这是我的 aurelia json 文件 我从 npm 加载它们 name moment path node modules m
  • 如何通过 Aurelia / Typescript 导入和使用 PhotoSwipe?

    我正在尝试使用照片滑动 http photoswipe com 在 Aurelia 项目中 但找不到使其工作的方法 在捆绑包下的 aurelio json 中 我有 name photoswipe path node modules pho
  • Aurelia js文件上传到服务器

    您好 我是 aurelia js 新手 我需要将文件上传到服务器 我使用 autrelia js materializecss 和 httpClient fetch 进行 api 调用 我不知道如何将文件发送到服务器 view
  • 使用 Aurelia 的 Fetch Client 时 Azure Translator API(认知服务)上出现 CORS 错误

    我尝试使用来自 Windows Azure 的非常基本的 API 调用来翻译一些文本 他们给出了一个快速入门示例代码 https learn microsoft com en us azure cognitive services tran
  • aurelia-fetch-client 动态创建请求标头

    我正在使用 aurelia fetch client 将一些数据发送到 web api 在注册方法中 headers Headers register this headers new Headers this headers append
  • aurelia 中的自定义属性不起作用?

    我正在学习 Aurelia 的工作原理 并且正在尝试让一个简单的自定义属性正常工作 它所做的只是根据某些值的变化来改变 div 文本的颜色 我有一个 div 其中包含 high bind changeColor 在我的属性中我有 impor
  • Aurelia:子路由器路由显示在 app.html 元素中的“主”导航栏和子视图中?

    我们想要一个侧边栏菜单和一个 主 区域 根据您的导航方式 侧边栏的菜单项将发生变化 并且新视图将加载到 主 区域 我创建了 app html
  • Aurelia 的财产变更订阅

    我的视图模型上有一个属性 我想根据其值监听并触发事件 如下所示 class viewModel constructor this value 0 let val 2 subscribe this value callbackForValue
  • Aurelia 中 fetch() 的错误处理

    我有一个 API 其中包含服务器引发错误 状态 500 时出现的问题的有用描述 该描述作为响应文本的一部分 我的客户端代码使用 Aurelia 通过以下方式调用 apiaurelia fetch client使用通用方法进行调用 funct
  • 带有打字稿接口的 Aurelia DI

    我已经浏览了 Aurelia DI 的文档并查看了源代码 并想分享我想要实现的目标 这样如果我遗漏了一些明显的东西 我就可以被击落 我看过样品here https github com cmichaelgraham对于 Aurelia 的
  • Aurelia 使可绑定的行为在对象属性上可观察

    在 Aurelia 绑定中 如果在组件中我们对属性使用可观察装饰 并且如果该属性是一个对象 那么我们将订阅该对象的所有属性 例如 import observable from aurelia framework export class C
  • 部署 aurelia.cli 构建的应用程序

    我已经构建了一个没有后端的简单 aurelia 网页 现在我有兴趣投入生产 我使用 Aurelia cli 进行捆绑 希望这会很简单 但我不确定如何继续 我应该将哪些文件上传到服务器才能使网站正常运行 谢谢您的帮助 简而言之 au buil
  • 到 ref 属性的绑定何时在 Aurelia 中生效?

    这是这个问题的后续 访问 Aurelia 中的 DOM 元素 https stackoverflow com questions 29863044 access a dom element in aurelia 屏幕激活生命周期中是否有一个
  • Aurelia 自定义属性中的双向绑定

    UPDATE 看起来这是一个已知的错误 https github com aurelia templated issues 253 https github com aurelia templating issues 253我将其留在这里是
  • Aurelia 验证 - 验证失败时不显示任何消息

    我一直在研究 Aurelia Validation 示例 并且有以下内容 索引 html
  • toastr.js 如何在 Aurelia 和 Typescript 中工作?

    我似乎无法让这些一起工作 我正在使用 Aurelia CLI 并以类似的方式成功地对其他库 如 select2 spin moment 和 numeric 进行了操作 但我似乎无法让 toastr 工作 这是我到目前为止所拥有的 首先我跑了

随机推荐

  • Python 3 和 NLTK 与 WordNet 2.1 - 这可能吗?

    我将 Python 3 和 NLTK 3 0 0 与 WordNet 3 0 结合使用 我想用该数据 semval2007 https github com alvations pywsd tree master pywsd data se
  • 为什么在这段代码中,await 不会阻塞 flutter 中的 ui

    在默认示例应用程序中 每当您创建新的 flutter 项目时 我都添加了以下代码 initState super initState loop loop async while true await Future delayed Durat
  • C# 中的数组列表

    我们可以将 ArrayList 作为参数传递给 C 中的方法吗 绝对地 然而 你很少应该这样做 这些天你应该差不多always使用泛型类型 例如List
  • 动态 SQL 查询根据单元格中的空值忽略空值

    我有一个动态 SQL 查询 在运行时具有不同的列名和表 我希望让 SQL 查询根据行是否在任何单元格中包含 Null 值来忽略读取数据 SELECT rsv intension rsvt FROM resolve table kb wher
  • 使用复杂风味树更改 google-services.json 的搜索位置

    我知道已经有人问过这个问题 但是对于 4 2 0 以上的 com google gms google services 的任何版本 问题仍然存在 我的 google services json 文件的搜索位置不再考虑风味树状结构 它只写着
  • 使用 Angular JS 时如何加载 AMD 模块?

    由于某种奇怪的原因Angular JS 有自己的模块系统 既不是 AMD 也不是 CommonJS http docs angularjs org guide module 我有许多 AMD 格式的现有模块 我想在 Angular 应用程序
  • ADL 是否适用于全局命名空间?

    Examples https stackoverflow com a 5076640 321013 such as https groups google com forum original comp lang c moderated 1
  • 多个 Android 应用程序依赖于带有 gradle 的 android 库

    我仍在学习 gradle 但根据我所读到的内容 我想知道这是否可能 我有多个 Android 应用程序 app1 app2 app3 它们依赖于 android 库 L android 库 L 将依赖于 volley 等外部库 而应用程序将
  • 如何在android中的NumberPicker中自定义数字的值?

    我有一个数字选择器 用于设置以 MB 为单位的数据限制 现在 我有 numberPicker 包含按顺序排列的数值 如 1 2 3 2000 MB 但我想要一个应包含 100 200 300 2000MB 等数值的 numberPicker
  • PostgreSQL psycopg2 返回字符串元组而不是元组元组?

    我有一个奇怪的问题 在搜索 Google SO 没有发现类似的情况后 我不太确定如何解决它 当我尝试从光标获取查询结果时 它给了我一个元组的元组 除了元组是字符串 下面是代码 def queryFeeds db sql SELECT ngo
  • 如何在作业开始前清理 Jenkins 管道中的工作区

    我需要在构建开始之前清理工作区 我尝试使用cleanDir 分阶段进行 但在声明性管道中 检查首先发生 并且当阶段与cleadDir运行时 签出的代码也会被清除 这是不希望的 在声明式管道中签出之前 我们如何清除工作区 实际上 我必须根据管
  • 如何将本地 django 制作的站点移动到另一台机器上?

    我努力寻找我的查询的解决方案 但没有成功 我在本地机器上使用 django 制作了一个网站 现在我想在另一台机器上安装相同的 django 制作的网站 MySQL是我正在使用的数据库 如何将本地 django 制作的网站移动到另一台机器上
  • PHP - Postgresql 如果返回错误,如何回滚查询?

    我正在使用 php 和 postgres 进行 CRUD 我想知道如果出现错误是否有办法回滚事务 实际上 如果我在事务中遇到错误 id 主键 就会增加 然后我会丢失一个 id 以供将来使用 我该如何预防 我的意思是 如果插入查询失败 不要在
  • 套接字无法连接到端点

    var socket new Socket localhost 4000 socket connect Returns WebSocket connection to ws localhost 4000 ws failed Error du
  • 扩展 Backbone.Collection 原型

    继从这个问题 https stackoverflow com questions 10219182 retrieve element from backbone collection removen 我正在尝试使用一些自定义方法来增强 Ba
  • AWS lambda函数在超时错误后停止工作

    我有一个简单的 lambda 函数 它异步进行 API 调用 然后返回数据 99 的情况下这都非常有效 当 API 花费的时间超过 lambda 配置的超时时间时 它会按预期给出错误 现在的问题是 当我对 lambda 函数进行任何后续调用
  • Xcode 5 中的代码签名

    我在 Xcode 5 中验证我的应用程序时遇到问题 我在 2 周前提交了更新 Xcode 4 正常 我没有触及任何证书或配置文件 当我尝试验证时 我得到 当我尝试下载身份时 Xcode 崩溃了 我进入偏爱 gt accounts并刷新了我的
  • 如何删除iOS应用程序中呼叫某人时的弹出窗口? [复制]

    这个问题在这里已经有答案了 我想建议用户从应用程序拨打电话 并弹出一个带有特定文本的窗口 我首先向他展示弹出窗口 如果他同意 然后我运行代码从应用程序拨打电话 但与使用无关tel telprompt tel 对于链接 我总是从系统中弹出第二
  • 使用 Flask wtforms 验证器而不使用表单

    我正在从 iOS 应用程序接收用户注册数据 我想使用 wtforms 附带的验证器来确保电子邮件和密码可接受 但是 我没有使用 Flask 表单 因为用户是从 iOS 文本字段输入数据 是否可以使用 wtforms 验证器检查传入的 JSO
  • 如果 Aurelia 理解“导入”,为什么还要使用依赖注入?

    我不明白 如果我可以使用import在 Aurelia 中 为什么我必须将构造函数与 autoinject 还有这一切 我确信我错过了一些东西 但是 据我所知 我可以随时使用导入的模块 import something from whate