【问题标题】:angular 2 transient providers instead of singletonangular 2 瞬态提供程序而不是单例
【发布时间】:2018-06-26 01:59:45
【问题描述】:

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

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();
    }
//...
}

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

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

【问题讨论】:

  • 在组件providers属性上配置
  • @vikas,如何在利用依赖注入器的同时做到这一点?
  • 在阅读问题时,它看起来与您真正想要的不同(根据问题,它不容易理解)!

标签: javascript angular typescript websocket signalr


【解决方案1】:

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

@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

【讨论】:

  • 谢谢,看起来它会起作用,但我希望文档中有更好的解释
  • 是的,我对文档感到非常失望 - 即使您直接查找它,它也是指令和组件之间的循环引用。
  • 是的,Vikas 提供了一个很好的文档版本,它解释了提供服务链接的范围,但是您首先回答了一个示例,所以我给您标记了支票,如果您愿意的话,请投票给他的答案同样,所以我不会感到内疚;)
  • 听起来很划算;)
  • 谢谢!!我将我的 DataSource 注册为模块上的提供者,并且由于它是作为单例注入的,所以里面的 BehaviourSubject 已完成并且没有重新实例化另一个运行:-)
【解决方案2】:

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

  1. NgModule 上的提供者。

  2. Components上的提供者

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

上配置它

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

Providing services
Angular's Hierarchical Dependency Injection system

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2017-02-14
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多