Angular 2依赖注入(inject)从构造函数外部进行实例化

标签 angular typescript dependency-injection

Angular 2 中有关 DI 的每个教程都是将依赖项设置到构造函数中。但是,如果我想创建该类的实例并且该类对其他类有一些依赖性怎么办。

我有 A 类和 B 类。B 类应该注入(inject)到 A 中。但是 A 每次都不一样,应该能够创建它的一个实例。

如果我在 A 的构造函数中设置 DI,如何调用 new A()

我尝试使用 @Inject(B) 修饰将 B 作为私有(private)变量添加到 A

class A {
  @Inject(B) b: B;
}

最佳答案

Angular 依赖注入(inject)只支持构造函数注入(inject)。

你可以注入(inject)一个注入(inject)器

constructor(private injector:Injector) {}

foo() {
  var x = injector.get(B);
  var a = new A(b);
}

这也可能有助于您的情况,即 DI 注入(inject)一个工厂函数,该函数在每次调用时都返回一个新实例。 Create new instance of class that has dependencies, not understanding factory provider

您还可以设置新的注入(inject)器,也包括用于查找供应商的父注入(inject)器。另见 Getting dependency from Injector manually inside a directive

关于Angular 2依赖注入(inject)从构造函数外部进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42458213/

相关文章:

jquery - 向 JQueryStatic 接口(interface)添加属性

c# - 构造函数注入(inject)过度使用

c# - ASP.NET 5 中的依赖注入(inject)和对象处置

php - 在扩展 LaravelValidator 的自定义 Laravel Validator 类中进行依赖注入(inject)

jquery - Angular2 - 删除单击删除按钮的行或列

excel - Angular 4上传excel(xls,xlsx)并明智地转换json记录

javascript - TypeError : ctx. onCreditChange 不是一个函数 Angular

angular - ng-packagr:构建错误 EPERM:不允许操作

unit-testing - Angular 2 - TestBed.configureTestingModule - 供应商 :[] throws Use of reserved word 'import' error

javascript - 如何使用 Jest 和 typescript 模拟模块变量