角度服务注入设计 - 模式与两个服务密切相关

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了角度服务注入设计 - 模式与两个服务密切相关相关的知识,希望对你有一定的参考价值。

我有两个服务,如Service1Service2

这两项服务都在AppModule(Root模块)中注册。

Service2注入Service1,如下所示。

@Injectable()
class Service2{
  constructor(){}
  public foo(){}
}

@Injectable()
class Service1{
  constructor(public service2:Service2){
    this.service2.foo()
  }
}

而且,一个组件需要Service1Service2的函数foo()。

在这一点上,我有一个关于将这些服务注入组件的设计模式的问题。我认为有两种方法可以实现我的目标。

模式1

@Component()
class Component{
  constructor(
    public service1:Service1
    ,public service2:Service2
  ){
    this.service2.foo()
  }
}

模式2

@Component()
class Component{
  constructor(
    public service1:Service1
  ){
    this.service1.service2.foo()
  }
}

我认为模式2因为简单而更好。

那么,哪一个更好?或者还有其他建议吗?

答案

观察你的模式2,每次你必须使用它时你必须使用this.service1.service2.foo(),对我来说是额外的工作。在这两种模式中,您的服务都已初始化,因此我建议使用模式1,因为this.service2.foo()非常有效。

以上是关于角度服务注入设计 - 模式与两个服务密切相关的主要内容,如果未能解决你的问题,请参考以下文章

Spring:面向切片编程

工作中常见术语

话说 依赖注入(DI) or 控制反转(IoC)

PHP依赖注入(DI)和控制反转(IoC)详解

[ASP.NET Core 3框架揭秘] 依赖注入:一个Mini版的依赖注入框架

在角度指令单元测试中注入服务