【问题标题】:Inject Injectable Classes from Same File in Another Class从另一个类中的同一文件中注入可注入类
【发布时间】:2018-08-16 08:18:45
【问题描述】:

问题

所以我在database.ts 中写了一个Database 类,我希望有两个可注入成员DocumentList,它们都在同一个文件中。由于项目的组织,它们必须保留在同一个文件中。经过孜孜不倦的尝试,我一直无法使Databasedocumentlist非空成员,或者通过Database的构造函数注入这些类。错误包括Can't resolve all parameters for DatabaseCan't get document of undefined 等。这是我的尝试。

尝试

database.ts:

Database 类(多次尝试)

@Injectable()
export class Database {
      constructor(@Inject(Document) public document:Document, @Inject(List) public list:List) {}
}

@Injectable()
export class Database {
      public document:Document;
      public list:List;
}

Document

@Injectable()
class Document {
      constructor(private events:Events, private db: AngularFireDatabase, public auth:Auth, public utility:Utility) {}
      ...
}

List

@Injectable()
class List {
      constructor(private events:Events, private db: AngularFireDatabase, public auth:Auth, public utility:Utility) {}
      ...
}

注意事项

我想找到一个可以引用数据库类及其子类的解决方案,如下所示: this.database.document.function()this.database.list.function()

非常感谢!

【问题讨论】:

  • 您是否尝试过在构造函数中不使用 @Inject(...) 的东西?另外,您是否通过提供者注册了所有三个课程?
  • @DanielWSrimpel 好问题;是的,我试过这样做,并且我的模块中只有Database 作为提供者,因为对所有三个都这样做会导致循环依赖错误。
  • 这三个都需要被列为提供者(这就是为什么你用@Injectable标记它们)。如果存在循环引用问题,那么会发生其他一些事情,因为数据库依赖于这两个,并且在另一个方向上没有依赖关系。

标签: angular typescript ionic-framework ionic3 angular5


【解决方案1】:

问题解决了!

按照 Daniel W Strimpel 的建议,我DocumentList 添加为导入到我的 app.module.ts 中,如下所示:

import { Database, Document, List } from '../classes/database';

将上述类注册为提供者

我只是确保我不会将 import DocumentList 单独导入到使用这两个类的文件中,而是为这两个类的所有功能导入 Database。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2014-09-05
    相关资源
    最近更新 更多