Рубрики
Без рубрики

Зависимость впрыска с фринтжей

Инъекция зависимости с фринтжей. Помечено DI, JavaScript, Frintjs, Framework.

Эта статья была впервые опубликована на Середина .

Для тех, кто еще не знает, Frintjs. Это среда агностической основы для масштабируемых реактивных приложений на строительство, поддерживающих оба Реагировать и Vue.js Отказ

Поскольку выпуск V1 в начале 2017 года, ядро Frintjs Рамки были в основном ответственны за обработку зависимостей в ваших приложениях. В то время как другие пакеты в основном построены вокруг API основной пакеты Freint.

Провайдеры

У нас есть терминология для зависимостей в ваших приложениях Frintjs. Мы называем их Поставщики Отказ Поставщики – это любое значение, которое вы можете определить в вашем приложении FRINTJS, что позже может быть получено их уникальными именами.

Создание приложения FRINTJS так просто, как:

import { createApp } from 'frint';

const MyApp = createApp({
  name: 'MyAppName',
});

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

Вы найдете некоторые сходства с угловым 2+, это потому, что бегать использует вилку Diyai , который является портом API инжектора угловых игр, построенных таким образом, чтобы его использоваться без необходимости

Известные значения

Если вы уже знаете ценность вашего провайдера, вы можете использовать UseValue недвижимость, как это:

import { createApp } from 'frint';

const MyApp = createApp({
  name: 'MyAppName',
  providers: [
    {
      name: 'foo',
      useValue: 'foo value here',
    },
  ],
});

Теперь, как только вы создаете свое приложение, вы можете получить Foo Значение следующим образом:

const app = new MyApp();

const foo = app.get('foo'); // `foo value here`

Сгенерированные значения

Есть времена, когда вы действительно не знаете ценность вашего провайдера, и можете создать их только при создании самого приложения. Userfactory Собственность может быть использована в этих сценариях:

import { createApp } from 'frint';

const MyApp = createApp({
  name: 'MyAppName',
  providers: [
    {
      name: 'bar',
      useFactory: function () {
        return 'bar value here';
      },
    },
  ],
});

Теперь бар Поставщик может быть получен из экземпляра вашего приложения следующим образом:

const app = new MyApp();

const bar = app.get('bar'); // `bar value here`

Обратите внимание, что функция, создавающая бар Значение называется только один раз в приложении приложения. После этого он будет продолжать возвращение той же кэшированной стоимости от внутреннего реестра приложения всех поставщиков.

Генерируется из классов ES6

Есть также случаи, где вы также можете написать свои провайдеры в качестве классов ES6:

class Baz {
  getValue() {
    return 'baz value here';
  }
}

Чтобы установить классы ES6 в качестве провайдеров, мы можем использовать Useclass Свойство при определении их в Frintjs Apps:

import { createApp } from 'frint';

const MyApp = createApp({
  name: 'MyAppName',
  providers: [
    {
      name: 'baz',
      useClass: Baz,
    },
  ],
});

Теперь всякий раз, когда ваше приложение уменьшается, он также создает создание Баз Класс и установите экземпляр как значение Paz Provider.

const app = new MyApp();

const baz = app.get('baz'); // instance of Baz class
console.log(baz.getValue()); // `baz value here`

Похож на Userfactory , класс будет создан только один раз во время создания вашего приложения и вернет одно и то же кэшированную ценность каждый раз, когда вы делаете app.get ('baz') Отказ

Инъекционные провайдеры в других провайдерах

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

Из приведенных выше примеров, скажем, бар Поставщик должен знать ценность фюра . Как мы вводите Foo в бар ?

Мы можем использовать депс (Короткие для зависимостей) Свойство:

import { createApp } from 'frint';

const MyApp = createApp({
  name: 'MyAppName',
  providers: [
    {
      name: 'foo',
      useValue: 'foo value here',
    },
    {
      name: 'bar',
      useFactory: function (deps) {
        const { foo } = deps; // `foo value here`
        return foo + ', bar value here';
      },
      deps: ['foo'],
    },
  ],
});

Это то, что мы только что сделали выше:

  • Определить Foo провайдер
  • Определить бар провайдер
  • Для бар Список фюра как зависимость
  • Функция, которая генерирует бар Значение теперь получит Депс Объект со всеми его зависимостями ключи от их имени. Так как мы перечислены только Foo Как зависимость, он получит Foo только сейчас.
  • Сгенерированное значение бар Теперь возвращается Foo Значение здесь, BAZ Значение здесь Отказ

Вы можете попробовать это самостоятельно:

const app = new MyApp();

const foo = app.get('foo');
const bar = app.get('bar');

console.log(bar); // `foo value here, bar value here`

Вы можете применить аналогичную технику для Useclass слишком. Депс Затем объект будет передан классу в качестве первого аргумента конструктора:

class Baz {
  constructor(deps) {
    console.log(deps);
  }
}

Вы можете прочитать дальше об этом в официальных документах для пакета Freint здесь: https://frint.js.org/docs/packages/frient/ Отказ

Оригинал: “https://dev.to/fahad19/dependency-injection-with-frintjs-1oki”