Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angular – 确保实例化服务大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
背景

我们正在构建一个Angular2应用程序,并且正在积累与一个模块相关的许多特定服务.所有这些服务都松散地耦合到主题<类型>应用中的事件系统.

通过构造函数实例化

因为这些服务永远不会被直接引用,只能订阅事件,所以我们只需要以某种方式实例化它们.目前我们只是将它们注入到另一个使用的服务的构造函数中.

// services not used,just to make sure they're instantiated
constructor(
  private appservice1: Appservice1,private appservice2: Appservice2,private appservice3: Appservice3,...
){ }

这看起来有点像黑客,是否有更好的方法来显式声明需要实例化的服务而不通过构造函数注入它们?

解决方法

正如各种评论中所提到的,一个选项就是直接实例化这样的服务,这看起来就像

// app.module.ts

@NgModule({
  providers: [
    { provide: Appservice1,useValue: new Appservice1() },{ provide: Appservice2,useValue: new Appservice2() },useValue: new Appservice3() }
  ]
}) export class AppModule {}

您可能想要避免直接实例化,因为它违反了所有内容都由Injector思维模式处理,但它不会因为多种原因而破坏DI或可测试性.

一个原因是ES模块的使用,结合使用可配置的加载器,以及TypeScript结构类型性质的表现力,甚至可以通过利用像SystemJS这样的加载器在运行时将这些类型的依赖项交换为测试双精度.

也就是说,如果你发现自己经常这样做,你可能需要重新评估你的应用程序结构,但总的来说有很多用例,这个解决方案是最简单的.
此外,它可以打破喷射器中的循环.

通过注入器中的中断循环,我的意思是可以通过简单地在为useValue指定的表达式中引用其值来捕获需要在另一个服务的构造函数中注入的所需服务的实例.使用useFactory时,这种技术更有用.无论如何,这是相当罕见的,但可以是一个有用的解决方法.

大佬总结

以上是大佬教程为你收集整理的angular – 确保实例化服务全部内容,希望文章能够帮你解决angular – 确保实例化服务所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。