Как создать экземпляр класса обслуживания в конструкторе класса stati c - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть класс обслуживания параметров, подобный следующему:

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, RequestMethod } from '@angular/http';
import { Common } from './common';
import { CacheService } from "ionic-cache";

@Injectable()
export class PMService {  

    constructor(public http: Http, public comm: Common, private cache: CacheService) {        

    }
...
}

Я использую этот класс обслуживания на страницах, как обычно:

import { PMService } from '../../providers/pm-service';
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage { 
    myParameters;

    constructor(private pm: PMService ..) {                                    

    }

    getMyParameter(){
       this.pm.getParameters("ParameterKey").then(result=>{
         this.myParameters= result;
       });
    }
 ...
}

Я создал другой класс, который включает в себя stati c методы. Я хочу инициализировать свойство stati c в конструкторе этого класса. Я не могу использовать конструктор (private pm: PMService) {} из-за свойства stati c. Я попробовал следующий код, но он ожидает аргументы конструктора. Как правильно делать то, что я хочу?

import { PMService } from "./pm-service";

function construct(target: any) {
    target.construct();
}

@construct
export class Manager {

    private static counter: number = 0;
    private static defaultManagerValue: number = 0;

    static construct() {
        var pm = new PMService();
        this.defaultManagerValue = // I want to get this value from PMService;
    }

    public static incrementCounter() {
        this.counter++;
    }

    public isCounterEqualMyParameter(){
        return this.counter == this.defaultManagerValue;
    }
    ...
}   

1 Ответ

0 голосов
/ 25 апреля 2020

Вы не должны использовать класс c, а вместо него Singleton . Singleton - это класс с одним экземпляром в приложении, ссылающийся на angular docs:

Singleton - это служба, для которой в приложении существует только один экземпляр.

Вы можете изменить ваши методы stati c на методы экземпляра и изменить определение на:


@Injectable({
  providedIn: 'root',
})
export class Manager {
  private counter: number = 0;
  private defaultManagerValue: number = 0;

  // ...
}

Таким образом, вы можете свободно использовать DI в конструкторе, сохраняя тот же желаемый эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...