用@NgModule在providers定义了MyService token用useClass来提供:
值提供者:useValue
useValue 键让你可以为 DI 令牌关联一个固定的值。 使用该技巧来进行运行期常量设置,比如网站的基础地址和功能标志等。 你也可以在单元测试中使用值提供者,来用一个 Mock 数据来代替一个生产环境下的数据服务。
一个值-提供者的值必须在指定之前定义。
这一点和其他类型的提供者不同。
其它类型的提供者都会惰性创建它们的值,也就是说只在需要注入它们的时候才创建。
类提供者:useClass
useClass 提供的键让你可以创建并返回指定类的新实例。
你可以使用这类提供者来为公共类或默认类换上一个替代实现。比如,这个替代实现可以实现一种不同的策略来扩展默认类,或在测试环境中模拟真实类的行为。
useClass 在 SAP Spartacus 里的用法举例:
提供者使用 DateLoggerService 来满足 LoggerService。该 LoggerService 在 AppComponent 级别已经被注册。当这个组件要求 LoggerService 的时候,它得到的却是 DateLoggerService 服务的实例。
这个组件及其子组件会得到 DateLoggerService 实例。这个组件树之外的组件得到的仍是 LoggerService 实例。