Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >功能模块的提供者随处可见吗?

功能模块的提供者随处可见吗?
EN

Stack Overflow用户
提问于 2019-02-03 18:03:04
回答 2查看 510关注 0票数 1

角度文件说,在模块级别声明的提供程序对整个应用程序都是可见的:

引导模块的@NgModule.providers中列出的提供程序具有应用范围。向@NgModule.providers添加服务提供者可以有效地将服务发布到整个应用程序。

因此,这意味着可以将来自模块(AAAModule)的服务注入另一个模块(BBBModule)。但是,其他角度文件说我们可以通过在@NgModule上声明提供程序来将提供程序的范围限制在特定的模块上。

可以使用providedIn元数据选项在模块级别为非根NgModule配置提供程序,以便将提供程序的范围限制在该模块上。

同样,另一份文件说我们可以将提供者的范围限制在特定的组件上:

NgModule中的各个组件都有自己的注射器。可以通过使用@Component元数据在组件级别配置提供程序,将提供程序的范围限制为组件及其子提供程序。

那么,事实是什么?如果我在模块级别声明了一个提供程序,那么它对整个应用程序还是模块都是可见的呢?“范围”是指提供者的“生命”吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-03 18:24:00

我认为在你的理解中,造成你困惑的缺失部分是角的延迟加载特性。延迟加载的模块将有自己的注入器(但继承自根注入器)。因此,延迟加载的模块中列出的提供程序将被限定为该模块的作用域,并且只能在映射到该模块的路由中存活。

当模块导入到其他模块(不是延迟加载)时,那么这些模块中列出的所有提供程序都会合并到同一个注入器中。这些提供程序将在整个应用程序生命期内存活。

组件中列出的提供程序只能使用该组件的时间。例如,考虑一个列出提供程序并位于可以切换的*ngIf中的组件。当组件被创建时,也就是创建提供者的时候。当组件被破坏时,提供者也是如此。提供程序只能在该组件和任何组件/指令中访问,它们所列出的提供程序是DOM树中的后代。

考虑以下例子:

  • 模块A被导入到AppModule中
代码语言:javascript
代码运行次数:0
复制
- Providers listed in Module A reside in the root injector. That means that the provider is available across the whole app and lives for the entire life of the app.

  • 模块B被延迟加载。
代码语言:javascript
代码运行次数:0
复制
- A child injector is created. Providers listed in Module B or the providers that are listed in any module that is imported into Module B will reside in that new injector.

到目前为止,我只讨论了模块文件中列出的提供程序。接下来是使用装潢工的最新惯例(从角度6开始)。我建议您看看这篇文章。虽然本文讨论了在模块中列出提供者的旧方法与使用providedIn的新方法,但我认为它也可以帮助您理解提供程序可用的范围。

票数 1
EN

Stack Overflow用户

发布于 2019-02-03 18:32:00

引导模块的@NgModule.providers中列出的提供程序具有应用范围。向@NgModule.providers添加服务提供者可以有效地将服务发布到整个应用程序。

如果您在根模块装饰器providers数组中声明提供程序,那么是的,范围是整个应用程序。它与根注入器相关联,使同一单例实例在整个application.If中可用,一个提供程序在一个功能模块中声明,那么除非导入该模块,否则它将不可用。但是,如果在根模块中声明,那么它在任何地方都是可用的。

可以使用providedIn元数据选项在模块级别为非根NgModule配置提供程序,以便将提供程序的范围限制在该模块上。

如果您使用@Injectable并在providedIn属性中提到提供者的作用域,那么只有那些正在导入声明服务的模块的模块才会得到该实例。这就启用了树抖动,这实际上意味着如果在应用程序中不使用提供程序代码,则将其从最后的包中排除出来。

对于延迟加载的模块,创建根注入器的另一个子模块,它从根注入器中复制每件东西,再加上在惰性模块中声明的提供程序。在惰性加载组件的上下文中,提供者是从这个子注入器而不是从根注入器注入的。

NgModule中的各个组件都有自己的注射器。可以通过使用@Component元数据在组件级别配置提供程序,将提供程序的范围限制为组件及其子提供程序。

在这种情况下,每个组件都将获得它们自己的提供程序副本,它将是一个与根注入器中配置的实例不同的实例。当您需要一个您不希望跨组件共享的提供程序的私有副本时,请执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54509360

复制
相关文章
[PHP] laravel的服务提供者
在config/app.php文件中的providers数组是所有注册的服务提供者
唯一Chat
2021/07/20
5320
[PHP] laravel的服务提供者
ADAS功能模块介绍
ADAS 采用的传感器主要有摄像头、雷达、激光和超声波等,可以探测光、热、压力或其它用于监测汽车状态的变量, 通常位于车辆的前后保险杠、侧视镜、驾驶杆内部或者挡风玻璃上。
李小白是一只喵
2020/06/22
2.1K0
iOS视频功能模块的开发 原
        MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能,在使用这个框架时,需要导入头文件<MediaPlayer/MediaPlayer.h>。
珲少
2018/08/16
1.1K0
比较全的OA系统功能模块列表
如何判断一款协同OA软件,是否智能,是否注重细节,是否足够成熟呢?产品的设计优势、功能特性,需要我们总结,也需要让更多的用户了解。功能到底强在哪里?下文中将给出一个详尽的答案。 软件安装 傻瓜化向导式安装,自动智能配置,无需专人指导和配置 客户端电脑无需安装任何软件,使用浏览器即可实现全球办公 权限控制 权限管理支持三员管理机制 根据角色控制菜单权限 可按模块根据部门、角色设置管理范围 各模块根据具体情况内置权限,权限控制更加灵活 通过角色排序号,
庞小明
2018/03/09
7.3K0
vue 开发中遇到的功能模块
参考:https://www.jianshu.com/p/0cc51943147d
用户7043603
2022/02/25
4310
小知识科普:随处可见的短ID和短网址
早上收到快递小哥的短信说快递被放在了A地的丰巢快递柜,然鹅这个快递柜我并不知道在哪里。
帅地
2019/11/22
1.7K0
小知识科普:随处可见的短ID和短网址
[android] 内容提供者实现
UriMatcher类,new出来对象new UriMatcher(code) code是个int,表示未匹配到的返回值,一般使用常量UriMatcher.NO_MATCH是-1,把他定义成静态成员属性。
唯一Chat
2019/09/10
4380
solidity代码功能模块
这个合约是一个librray,只有一个函数isContract,且被声明为internal view.internal 限制这个函数只能由import这个合约内部使用;view 声明这个函数不会改变状态
rectinajh
2022/05/20
5930
物流采购功能模块设计
采购管理执行层,有些地方也称为”小采购“,主要由采购员组成,职责包括下采购单、跟单、催单、结算等相关的执行操作。
物流IT圈
2019/10/16
1.1K0
[android] 内容提供者简介
产生的原因是,当我们把数据存到数据库的时候,数据库的权限是私有的,把系统的短信应用中的数据库导出来,打开看到address字段是手机的号码,date字段是时间,type字段1,2代表发出去的短信和接受到的短信,body字段代表短信的数据。要想让别的应用程序访问自己数据库的数据,这时需要自己把数据给暴露出来。
唯一Chat
2019/09/10
4740
快速学习-Oozie的功能模块介绍
第2章 Oozie的功能模块介绍 2.1 模块 Workflow 顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个) Coordinator 定时触发workflow Bundle Job 绑定多个Coordinator 2.2 常用节点 控制流节点(Control Flow Nodes) 控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision,fork,join等。 动作节点(Action
cwl_java
2020/03/24
3090
LSP(分层服务提供者)
LSP本身是DLL,可以将它安装到winsock目录,以便创建套接字的应用程序不必知道此LSP的任何信息就能调用它。 运行原理: 套接字创建函数会在winsock目录中寻找合适的协议   调用此协议,的提供者导出的函数 完成各种功能。 编写目的: 让用户调用自定义的服务提供者,有自定义的服务提供者调用下层提供者。这样便截获所有的winsock调用了。 服务提供者本身是DLL,导出一些与winsock API相对应的SPI函数。winsock库加载服务提供者时,便依靠这些函数来实现winsockAPI。
用户1154259
2018/01/17
1.8K0
服务提供者框架示例
静态工程方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不必存在。这种灵活的静态工厂方法构成了服务提供者框架(Service Provider Framework)的基础,例如JDBC(Java 数据库链接,Java Database Connectivity)API。服务提供者框架是指这样一个系统:多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从多个实现中解耦出来。
用户2146693
2019/08/08
8010
dubbo 提供者(provider)的线程模型
如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。
MickyInvQ
2021/03/02
6420
dubbo 提供者(provider)的线程模型
Android 图片功能模块相关库
If you want to let your users choose crop ratio dynamically, just do not call withAspectRatio(x, y).
用户3004328
2018/09/06
1.2K0
Android 图片功能模块相关库
2.AsyncQueryHandler、内容提供者
会话页面 Test :测试 public class Test extends AndroidTestCase{ public void test(){ Uri uri = Uri.parse("content://sms/conversations"); String[] projection={ "sms.body AS snippet", "sms.thread_id AS thread_id", "groups.msg_count AS msg_count", "address as
六月的雨
2018/05/14
7160
Laravel 服务提供者指南
如果你使用过 Laravel 框架的话,那么,你不可能没听说过服务容器和服务提供者。事实上,它们是 Lavavel 框架核心,它们完成 Larvel 应用中服务启动的艰巨任务。
柳公子
2018/09/17
1.9K0
Android App Bundle:动态功能模块
自 2021 年 8 月起,Google Play 将开始要求新应用使用 Android App Bundle 进行发布。该格式将取代 APK 作为标准发布格式。虽然这个政策目前还无法影响到国内应用,但是作为Android开发者,对于新的动态还是要有一定的认识。本文并不是介绍Android App Bundle,因为它不是新的事物,相关的文章也有很多了,本文重点介绍的是Android App Bundle中“动态功能模块”的实际应用。
BennuCTech
2021/12/10
2.3K0
Android App Bundle:动态功能模块
laravel 以服务提供者的方式使用 elasticsearch
Providers/ElasticsearchServiceProvider.php
崔哥
2023/04/12
6920
点击加载更多

相似问题

如何在功能模块中隔离服务提供者

14

鬼魂随处可见

23

Javadoc随处可见

13

Rails模型随处可见

10

可以只发布动态功能模块的更新吗?

119
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档