Угловое внедрение зависимости служб в Javascript - PullRequest
1 голос
/ 07 июня 2019

Я пишу пакет Javascript npm.В моем коде у меня есть один класс, который я хочу вести как угловой сервис.Только один экземпляр этого класса должен быть создан и должен использоваться совместно в любом месте проекта.

//this class object would be shared across project and only one object can be created. also, its implementation could change in future
export class SharedClass {
    constructor(somethingImp) {
    }
    //more methods
}

export class ProjectClass1ThatNeedsSharedClassObj {
    //it should get the required object
}

export class ProjectClass2ThatNeedsSharedClassObj {
    //it should get the required object
}

Как мне написать простой DI для достижения этой функциональности?

Ответы [ 3 ]

0 голосов
/ 07 июня 2019

1) Создайте этот класс как сервис с помощью @Injectable decorator 2) Импортируйте этот класс в класс, где вы хотите его использовать 3) Создайте экземпляр класса сервиса в этот класс 4) Теперь вы можете получить доступ к методам класса сервиса, используяэкземпляр, созданный в конструкторе с использованием этого ключевого слова &.оператор 5) Вы должны написать класс обслуживания один раз и использовать его столько раз, сколько хотите

Счастливое кодирование

0 голосов
/ 07 июня 2019

Если вы хотите применить один объект через все методы DI, вы можете использовать статическую переменную. Это шаблон, который я обычно использую

export class SearchProvider {
  private static _default: SearchProvider

  constructor() {
  }

  static get Default() {
    return this._default || (this._default = new SearchProvider())
  }
}

export class Consumer() {
  private SearchProvider _provider = SearchProvider.Default;
}

0 голосов
/ 07 июня 2019

Это шаблон синглтона :

export class SharedClass {
    constructor() {
      // usual constructor code
      window.sharedClass = window.sharedClass || this;
    }
}

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

Если вы напишите x = new SharedClass(), у вас будет второй экземпляр в X, но вы не можете предотвратить это (хотя то же самое относится и к Angualr). У вас все еще будет первый экземпляр в вашей глобальной переменной.

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