什么时候提供 Angular 2+ 服务
When does the Angular 2+ service get provided
我已经阅读了很多关于 Angular 依赖注入系统的内容,但似乎仍然无法找到一个非常具体的问题的答案。
通过 @Module
的 providers: []
数组注册的供应商是 'picked up' 模块的当前(最近的父级)注入器。它们通常会在根 Injector 中注册,除非模块是延迟加载的,它会创建一个单独的注入上下文,它的工作方式有点像 {} 块(外部提供者可以在内部访问,但反之亦然,内部提供者优先) .如果提供者在 @Component
的 providers: []
数组中注册,它们也会被注入单独的上下文中,该上下文仅包括组件本身及其子组件。
然而,在 @Service()
装饰器中注册的服务发生了什么对我来说是个谜。如果该服务从未在任何地方使用过怎么办?或者,如果 @Service({providedIn: root})
仅在延迟加载模块中使用怎么办?如果是 providedIn: SomeLazyLoadedModule
怎么办?是否应该在模块的 providers
数组中提及此类服务?
我能找到的关于该主题的唯一具体信息是 'The AOT compiler may perform some optimizitions such as tree shaking',老实说,它并没有真正阐明很多。
如果上面的某些陈述有误,请随时纠正我。
首先,没有@Service
装饰器。它被命名为 @Injectable
.
如果您仅使用 @Injectable()
装饰服务,那么它不会在任何地方提供,除非您将它添加到模块或组件的 providers
数组中。
如果你用@Injectable({ providedIn: 'root' })
装饰它,那么它是在根模块中提供的,即相当于将它添加到根模块的providers数组中除了这允许完全忽略该服务,并且如果它从未被注入到任何地方,则不将其添加到任何包中:在这种情况下,由于它不在任何其他 TypeScript 文件的导入中,它可以被摇树:没有使用该服务,所以捆绑它没用。
如果你用@Injectable({ providedIn: SomeModule })
装饰它,那么它是在模块SomeModule中提供的,即它相当于将它添加到模块SomeModule的providers数组中与上面相同的例外情况,即如果没有导入它, 可以摇树。
我已经阅读了很多关于 Angular 依赖注入系统的内容,但似乎仍然无法找到一个非常具体的问题的答案。
通过 @Module
的 providers: []
数组注册的供应商是 'picked up' 模块的当前(最近的父级)注入器。它们通常会在根 Injector 中注册,除非模块是延迟加载的,它会创建一个单独的注入上下文,它的工作方式有点像 {} 块(外部提供者可以在内部访问,但反之亦然,内部提供者优先) .如果提供者在 @Component
的 providers: []
数组中注册,它们也会被注入单独的上下文中,该上下文仅包括组件本身及其子组件。
然而,在 @Service()
装饰器中注册的服务发生了什么对我来说是个谜。如果该服务从未在任何地方使用过怎么办?或者,如果 @Service({providedIn: root})
仅在延迟加载模块中使用怎么办?如果是 providedIn: SomeLazyLoadedModule
怎么办?是否应该在模块的 providers
数组中提及此类服务?
我能找到的关于该主题的唯一具体信息是 'The AOT compiler may perform some optimizitions such as tree shaking',老实说,它并没有真正阐明很多。
如果上面的某些陈述有误,请随时纠正我。
首先,没有@Service
装饰器。它被命名为 @Injectable
.
如果您仅使用 @Injectable()
装饰服务,那么它不会在任何地方提供,除非您将它添加到模块或组件的 providers
数组中。
如果你用@Injectable({ providedIn: 'root' })
装饰它,那么它是在根模块中提供的,即相当于将它添加到根模块的providers数组中除了这允许完全忽略该服务,并且如果它从未被注入到任何地方,则不将其添加到任何包中:在这种情况下,由于它不在任何其他 TypeScript 文件的导入中,它可以被摇树:没有使用该服务,所以捆绑它没用。
如果你用@Injectable({ providedIn: SomeModule })
装饰它,那么它是在模块SomeModule中提供的,即它相当于将它添加到模块SomeModule的providers数组中与上面相同的例外情况,即如果没有导入它, 可以摇树。