Где и как указать инициализатор для движка ember?

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

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

3 ответа

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

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

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

См. https://guides.emberjs.com/release/applications/dependency-injection/.

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

Пример из Ember Docs:

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

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

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

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

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

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

Другие вопросы по тегам