угловые 2 переходных провайдера вместо синглтона - PullRequest
0 голосов
/ 26 июня 2018

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

export class HubServiceBase {

    private readonly hubAuthorizationQueryParameter = 'authToken';

    onCreate = new EventEmitter<any>();
    connectionEstablished = new EventEmitter<Boolean>();
    connectionExists = false;

    private _hubConnection: any;

    constructor(public authManager: AuthenticationProvider) {            
    }

    initialize(hubSubRoute: string): void{
        const accessToken = this.authManager.getRawAccessToken();

        let hubUrl = environment.baseUrl + hubSubRoute;
        if (accessToken) {
            hubUrl += '?' + this.hubAuthorizationQueryParameter +'=' + accessToken;
        }

        this._hubConnection = new HubConnectionBuilder()
                                .withUrl(hubUrl)
                                .build();
    }
//...
}

функцию инициализации можно вызывать из разных служб, и она поддерживает веб-сокет с моим сервером.Одновременно может быть открыто несколько сокетов.

Как получить новый из инжектора зависимости каждый раз, когда страница запрашивает его?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы можете настроить инжекторы в Angular с помощью:

  1. провайдеров на NgModule.

  2. провайдеров на Components

Если вы хотите, чтобы экземпляр зависимости использовался глобально, а состояние совместно использовалось в приложении, вы настраиваете его на NgModule .- Singleton

Есливы хотите, чтобы отдельный экземпляр зависимости был общим для каждого экземпляра компонента, и его дочерние элементы вы настраиваете для свойства providers компонентов. Non-singleton

Providing services
Angular's Hierarchical Dependency Injection system

0 голосов
/ 26 июня 2018

Используйте свойство providers в декораторе @Component.

@Component({
  selector: 'selector-name',
  templateUrl: './template.component.html',
  providers: [ SomeService ]
})

Документы (не очень): https://angular.io/api/core/Component

Пример: https://stackblitz.com/edit/angular-playground-vewqis?file=app%2Fhello-framework%2Fcomponents%2Fcounter%2Fcounter.component.ts

...