[Angular / Ionic], звоните в класс (да, снова) - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно позвонить в службу класса Angular:

MyService

@Injectable()
export class MyService {
    constructor (private http: : HttpClient) { // HttpClient is just for the example
        console.log('MyService constructor');
    }

    getStuff(){
    }
}

MyClass

export class MyClass {
    constructor(){
        console.log('MyClass constructor');
    }

    doSomething(){
        // what i want to do
        return this.myService.getStuff();
    }
}

На моей главной странице

let myArray: MyClass[];
myArray.push(new MyClass());
myArray.push(new MyClass());
myArray.push(new MyClass());
myArray[0].doSomething();

Добавление @Injectable в MyClass не вариант, поскольку MyClass - это реальный экземплярный класс.

Вручную создать экземпляр MyServiceне имеет смысла, так как я хочу, чтобы MyService был единичным, и я не хочу, чтобы MyClass знал, что MyService нужен HttpClient (в противном случае я бы не использовал службу).

Использование собственного инжектора в MyClass кажется излишним и приводит кта же проблема, что и при создании экземпляра MyService вручную.

Я застрял, пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Внедрение зависимостей является одним из основных активов Angular Framework.Как сказал Sunil, вы можете внедрить свой сервис напрямую через конструктор MyClass.Он будет автоматически создан и готов к использованию.Вы также можете проверить официальную документацию здесь .

0 голосов
/ 11 октября 2018

Вы можете ввести класс Service в своем классе как-

export class MyClass {
    constructor(private myService : MyService){ //It will inject new instance of MyService
        console.log('MyClass constructor');
    }

    doSomething(){
        // what i want to do
        return this.myService.getStuff();
    }
}
...