Где и как указать инициализатор для движка 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
каталог.
Если вы хотите внедрить сервисы в маршруты, компоненты и контроллеры, вы должны сначала предоставить сервисы из приложения движку, как описано в документации движка.