加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖注入 – 实例化对象时的Aurelia依赖注入

发布时间:2020-12-14 05:00:38 所属栏目:百科 来源:网络整理
导读:如果我创建一个支持类,例如具有HttpClient的UserList将其注入其中,然后无论谁实例化该类都必须在构造函数中将HttpClient对象传递给它.不应该@inject(HttpClient)负责获取HttpClient单例并将其注入构造函数中吗?否则,每个需要引用UserList的类也将获得对Http
如果我创建一个支持类,例如具有HttpClient的UserList将其注入其中,然后无论谁实例化该类都必须在构造函数中将HttpClient对象传递给它.不应该@inject(HttpClient)负责获取HttpClient单例并将其注入构造函数中吗?否则,每个需要引用UserList的类也将获得对HttpClient的引用,以便它可以将其传递给UserList构造函数(并且无法实现注入的目的).

UserList.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); 
    }
}

解决方法

处理此问题的正确方法是使用Factory Resolver

import { Factory } from 'aurelia-framework';

@inject(Factory.of(UserList))
export class DoSomething {

    userList: UserList;

    constructor(UserList) {

        // this is a factory,so you call the function without new
        this.userList = UserList();
    }
}

@inject(HttpClient)
export class UserList {

    http: HttpClient;

    constructor(HttpClient) {
        this.http = HttpClient;
    }
}

有关详细信息,请参阅此related question或official docs中给出的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读