angular 2 瞬态提供程序而不是单例
Posted
技术标签:
【中文标题】angular 2 瞬态提供程序而不是单例【英文标题】:angular 2 transient providers instead of singleton 【发布时间】: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,如何在利用依赖注入器的同时做到这一点?
在阅读问题时,它看起来与您真正想要的不同(根据问题,它不容易理解)!
【参考方案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 中配置注入器:
NgModule
上的提供者。
Components
上的提供者
如果您希望全局共享依赖项的实例并在应用程序之间共享状态,您可以在 NgModule
.-Singleton
如果您希望在组件的每个实例及其子组件之间共享一个单独的依赖项实例,您可以在组件的 providers
属性上配置它。非单例
Providing services
Angular's Hierarchical Dependency Injection system
【讨论】:
以上是关于angular 2 瞬态提供程序而不是单例的主要内容,如果未能解决你的问题,请参考以下文章
您可以在 Angular / NestJS 模块提供程序中使用 `useFactory` 属性并返回一个类而不是实例吗?