Angularjs 4 - 注入(inject)服务而不在构造函数上传递参数

标签 angular dependency-injection

有没有一种方法可以将服务注入(inject)到类中而不必将其声明为构造函数的参数?

通常的方法工作得很好,我对此没有任何提示。我只是想创建一个父类(super class)来处理一些依赖于服务的东西,我希望它是独立的,我不想在子类上引用该服务。

这是通常的方式:

export class MyComponent {
  constructor(private someService: SomeNpmInstalledService) {}

  doSomething() {
    this.someService.do();
  }
}

这就是我要找的:

export class MyComponent {
  @Some injection magic annotation here
  private someService: SomeNpmInstalledService;

  constructor() {}

  doSomething() {
    this.someService.do();
  }
}

我将尝试通过以下示例来解释我想要这种功能的原因:

export class MyComponent extends MySuperClass {
  constructor() {
    super();
  }

  doSomething() {
    super.someSuperClassFonctionality(); 
  }
}

export class MySuperClass {
  constructor(private someService: SomeNpmInstalledService) {}

  someSuperClassFonctionality() {
    someService.doStuff(); 
  }
}

上面的代码给出了一个错误,因为在我的组件中,当我调用super() 时,我必须传递在我的父类(super class)的构造函数中定义的参数。但这正是我不想做的。我希望我的组件甚至不知道父类(super class)内部使用的服务。

最佳答案

是的:使用 Injector。 https://angular.io/api/core/Injector

import { Injector } from '@angular/core';

然后在你的构造函数中:

constructor(injector: Injector) {
  let this.service = injector.get(ServiceToInject);
}

关于Angularjs 4 - 注入(inject)服务而不在构造函数上传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46530036/

相关文章:

javafx - 传递参数JavaFX FXML

ios - 查看模型依赖注入(inject)

java - 如何在 Ninjaframework 的 ConstraintValidator 中使用依赖注入(inject)?

Angular Material - 手动输入错误地转换日期

css - 这个 LESS 变量是什么语法 @grid-breakpoints : xs 0, sm 576px, md 768px, lg 992px, xl 1200px;

Angular2-OnInit : Values returned from Service' subscribe function does not get assigned to Component field/s

c# - 希望 Autofac 不注册任何具有多个实现的接口(interface)

c# - 解决对象的最佳方法是什么?

java - Angular 6,HtttpClient,带有后端 Spring Boot!我的标题未到达后端

node.js - 下载响应 angular2 中发送的文件