dependency-injection - 实例化对象时的 Aurelia 依赖注入(inject)

标签 dependency-injection typescript aurelia

如果我创建一个支持类,例如已将 HttpClient 注入(inject)其中的 UserList,那么无论谁实例化该类,都必须在构造函数中将 HttpClient 对象传递给它。 @inject(HttpClient) 不应该负责获取 HttpClient 单例并将其注入(inject)构造函数吗?否则,每个需要引用 UserList 的类也将获得对 HttpClient 的引用,以便它可以将其传递给 UserList 构造函数(并破坏注入(inject)的目的)。

用户列表.ts

@inject(HttpClient)
export class UserList {
    constructor(public http: HttpClient){
    }
...
}

DoSomething.ts

export class DoSomething {
    userList: UserList;

    constructor(){
         this.userList = new UserList(); //doesn't work without passing HttpClient
    }
}

为了完成这项工作,我必须在 DoSomething 类中获取对 HttpClient 的引用,即使它不会直接使用它。似乎实现不佳的工作版本:

DoSomething.ts

@inject(HttpClient)
export class DoSomething {
    userList: UserList;

    constructor(public http: HttpClient){
         this.userList = new UserList(http); 
    }
}

最佳答案

如果你使用 typescript ,不用担心这个。 使用@autoinject 看看奇迹发生吧!

像这样:

import {autoinject} from 'aurelia-framework';

@autoinject()
export class UserList {
    constructor(private http: HttpClient){
    }
...
}

在其他文件中:

import {autoinject} from 'aurelia-framework';

@autoinject()
export class DoSomething {
    constructor(private userList: UserList){
    }
}

TypeScript 编译器将发出类型元数据,Aurelia 将以正确的方式读取此注入(inject)实例!

更多信息:http://aurelia.io/docs.html#/aurelia/dependency-injection/1.0.0-beta.1.2.3/doc/article/dependency-injection-basics

关于dependency-injection - 实例化对象时的 Aurelia 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652128/

相关文章:

php - Symfony2 如何在 Controller 中注入(inject)请求并获取路由参数

c# - 依赖于实现相同接口(interface)的两个对象的简单注入(inject)器

android - Dagger 2 在 Activity 以外的类中注入(inject)字段

javascript - Angular 6 - 指令输出在同一时刻触发所有组件

json - 部署 Aurelia/Node 应用程序时需要什么?

java - Guice:注入(inject)用于实现抽象方法的参数

javascript - 如何在 typescript 或JavaScript中连接子数组?

javascript - 使用 VSCODE 进行调试无法在 Webpack + Typescript + 无框架中工作

javascript - 如何在 aurelia 中验证动态绑定(bind)下拉列表?

requirejs - 如何在Aurelia-CLI中添加系绳以与Bootstrap 4一起使用