Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度扩展服务、继承和di,如何使构造函数匹配?_Javascript_Angular_Typescript_Dependency Injection_Angular5 - Fatal编程技术网

Javascript 角度扩展服务、继承和di,如何使构造函数匹配?

Javascript 角度扩展服务、继承和di,如何使构造函数匹配?,javascript,angular,typescript,dependency-injection,angular5,Javascript,Angular,Typescript,Dependency Injection,Angular5,我试图对我拥有的一些服务进行某种继承。 我真的不知道这是不是一个好的做法,无论如何,我真的想重构所有的应用程序得到新的方法 不管怎样,这就是我所拥有的 ............................... @Injectable() export class ApiBaseService { ............................... constructor(url : string, _logger : LoggerService) {

我试图对我拥有的一些服务进行某种继承。 我真的不知道这是不是一个好的做法,无论如何,我真的想重构所有的应用程序得到新的方法

不管怎样,这就是我所拥有的

    ...............................

@Injectable()
export class ApiBaseService {

    ...............................

  constructor(url : string, _logger : LoggerService) {

    ...............................    

 }

    ...............................
还有一个儿童班

    ...............................


@Injectable()
export class ApiWhatEverService extends ApiBaseService {

  constructor(private _http: Http) {
    super(environment.apiUrl);
  }

    ...............................

}
这里的要点是,由于与LoggerService相关的DI,构造函数不匹配

所以我在这里的想法是尝试以任何其他方式注入LoggerService,就像使用angular的注入器一样,但它失败了

    ...............................

@Injectable()
export class ApiBaseService {

  apiUrl;
  _logger : LoggerService;

    ...............................

  constructor(url : string) {

    ...............................    


    let injector = ReflectiveInjector.resolveAndCreate([
      LoggerService
    ]);
    this._logger = injector.get(LoggerService);
    //IT DOESN'T GET ALL THE METHOD ASSOCIATED TO LoggerService
    ...............................
  }

    ...............................

}
如果有人能帮助或指导我,我将不胜感激


非常感谢您提前

框架实例化了提供者。用户不能向提供程序类构造函数提供参数
url:string
在可注入类中没有意义,它将导致DI错误,因为没有
string
提供程序

有几种方法允许为提供者提供配置(请参阅)。可以在配置提供程序中提供URL:

const CONFIG = new InjectionToken<any>('config');
function configFactory() {
  return {
    url: environment.url
  }
}

...
providers: [..., { provide: CONFIG, useFactory: configFactory }]
...
ReflectiveInjector
通常用于边缘情况(它被弃用,取而代之的是具有附加限制的
StaticInjector
)。这里是反模式的。应尽可能使用现有的喷油器

@Injectable()
export class ApiBaseService {
  constructor(
    @Inject(CONFIG) protected config: any,
    protected _logger : LoggerService
  ) {...}
}

@Injectable()
export class ApiWhatEverService extends ApiBaseService {

  constructor(
    @Inject(CONFIG) config: any,
    _logger : LoggerService,
    private _http: Http
  ) {
    super(config, _logger);
  }
}