angular 2 瞬态提供者而不是单例

joh*_*y 5 5 javascript websocket signalr typescript angular

我有提供者,我想充当瞬态而不是单身人士。我知道我可以手动创建对象,但我仍然想通过依赖注入器来解决依赖关系。

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();
    }
//...
}
Run Code Online (Sandbox Code Playgroud)

可以从不同的服务调用初始化函数,它与我的服务器保持一个网络套接字。可以同时打开多个套接字。

每次页面请求它时,如何从依赖注入器获取一个新的?

小智 10

providers@Component装饰器中使用该属性。

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

文档(不是很好):https : //angular.io/api/core/Component

示例:https : //stackblitz.com/edit/angular-playground-vewqis?file=app%2Fhello-framework%2Fcomponents%2Fcounter%2Fcounter.component.ts


Vik*_*kas 6

你可以通过以下方式在 Angular 中配置注入器:

\n\n
    \n
  1. 上的提供商NgModule

  2. \n
  3. 供应商上Components

  4. \n
\n\n

如果您希望全局共享依赖项的实例并在应用程序之间共享状态,您可以在NgModule.- Singleton上配置它

\n\n

如果您希望在组件及其子组件的每个实例之间共享依赖项的单独实例,您可以在组件providers属性上配置它。非单例

\n\n

Providing services\n
Angular\'s Hierarchical Dependency Injection system

\n