Где и как указать инициализатор для Ember Engine?

В моем приложении я использовал инициализаторы для внедрения сервисов в маршруты, контроллеры и компоненты. Сейчас я пытаюсь использовать Ember Engine. Я поделился своими службами приложений со своим движком, но мне нужно внедрить общие службы приложений в маршруты, контроллеры и компоненты движка с помощью инициализатора.

В моем приложении я могу сгенерировать инициализатор и внедрить службы. Как это сделать на моем движке?


person Chendraayan    schedule 15.02.2019    source источник


Ответы (3)


Эта команда должна создать инициализатор в соответствующей папке внутри репо-движка:

ember g initializer <init-name> -ir <engine-name>

В идеале лучше всего внедрять службу в контроллер/маршрут/компонент, как указано в другом ответе.

См.: https://guides.emberjs.com/release/applications/dependency-injection/#toc_ad-hoc-injections

person Abhilash L R    schedule 17.02.2019

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

Пример из документов Ember:

import Component from '@ember/component';
import { inject as service } from '@ember/service';

export default Component.extend({
  shoppingCart: service()
});

Это сделает услугу корзины покупок доступной здесь. Вы можете сделать то же самое в маршрутах и ​​​​контроллерах, и этот сервис является одноэлементным, поэтому он будет создан только один раз и разделяет состояние между каждым местом, к которому он обращается.

Это позволяет избежать необходимости возиться с созданием инициализатора для конкретного движка.

person jrjohnson    schedule 15.02.2019

На самом деле я обнаружил, что инициализаторы для движка можно настроить аналогично инициализаторам для приложения. Его можно указать в каталоге lib/<engine>/addon/initializers.

Если вы хотите внедрить сервисы в маршруты, компоненты и контроллеры, вы должны сначала поделиться сервисами из приложения с движком, как описано в документация по движку.

person Chendraayan    schedule 15.02.2019