Подтвердить что ты не робот

Angular 2: Inject Service для другой службы. (Нет ошибки поставщика)

Я хочу добавить службу к другой службе:

@Injectable()

export class Dispatcher {
}


@Injectable()

export class TodoStore {

    constructor(@Inject(Dispatcher) dispatcher:Dispatcher){ 

    }
}

Но я всегда получаю сообщение об ошибке: Нет провайдера для диспетчера!

Спасибо.

4b9b3361

Ответ 1

Вам нужно provide выполнить свою службу. Пожалуйста, обратитесь к angular2 docs

Вы можете указать его в методе начальной загрузки:

bootstrap(AppComponent,[TodoStore,Dispatcher]);

или компонент приложения:

@Component({
    ...
      providers:[TodoStore,Dispatcher]
}
...

Или в любом другом компоненте, в зависимости от ваших потребностей.

Кроме того, вам не нужно @Inject(Dispatcher) в конструкторе. Он в основном такой же, как

constructor(dispacher:Dispatcher){
}

О да, добро пожаловать в SO:)

Ответ 2

Спасибо за ответ.

Поскольку это не компонент, решение @Component (...) не применяется.

bootstrap(AppComponent,[TodoStore,Dispatcher]); 

работает. Но это делает это main.ts центральным местом.

Ответ 3

Массив поставщиков доступен в @NgModule. Вы можете предоставить свою услугу, объявив свою службу в этом массиве.

@NgModule({
    declarations:[...],
    imports:[...],
    providers: [MyCustomService],
    bootstrap:[AppComponent]
})

Ответ 4

Попробуйте следующее:

myMainService.ts

import { myOtherService } from 'myOtherService';

export class myMainService {
 constructor() {
   let myOtherService = new myOtherService();
 }
}

myOtherService.ts

export class myOtherService {
    constructor() {
        console.log('service was imported');
    }
}