首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >角:查找实现特定接口的所有提供程序

角:查找实现特定接口的所有提供程序
EN

Stack Overflow用户
提问于 2018-01-22 05:08:24
回答 1查看 1.9K关注 0票数 5

在我的4+应用程序中,我想创建一个基本的插件机制:

  • 扩展点定义为接口。
  • 扩展实现该接口
  • 要找到所有扩展,我需要在运行时发现该接口的实现。

例如:接口SearchStrategy与实现PersonSearchStrategyDocumentSearchStrategy (都是服务,注册为提供者)。

是否有一种方法可以通过查询SearchStrategy 接口的实现来动态获取这些服务的实例?如何实现?

(可能是一些与喷射器相关的功能?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-22 06:31:05

如果您将服务注册到InjectionToken并使用provided multi,则这是一种可能。

您可以创建带有接口的注入令牌。

代码语言:javascript
运行
AI代码解释
复制
export const SearchStrategyToken = new InjectionToken<SearchStrategy[]>('SearchStrategy');

在您的模块寄存器中:

代码语言:javascript
运行
AI代码解释
复制
providers: [
  {provide: SearchStrategyToken, useClass: PersonSearchStrategy, multi: true}, 
  {provide: SearchStrategyToken, useClass: DocumentSearchStrategy, multi: true},
]

在您的组件或服务中:

代码语言:javascript
运行
AI代码解释
复制
constructor(private injector: Injector) {

  const services = this.injector
  .get(SearchStrategyToken); // return 2 items [ PersonSearchStrategy, DocumentSearchStrategy ]

  const personSearch = services.find(x => x.constructor.name === 'PersonSearchStrategy');

  const docSearch = services.find(x => x.constructor.name === 'DocumentSearchStrategy');

}

这里提供的代码示例:https://stackblitz.com/edit/angular-clxr6k

但是,如果您提供更多关于用例的详细信息,那就更好了。可能有更好的解决方案比走上述路线。

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

https://stackoverflow.com/questions/48382323

复制
相关文章
linux 上查找包含特定文本的所有文件
原文链接:https://rumenz.com/rumenbiji/linux-find-strings.html
入门笔记
2021/11/24
4K0
linux 上查找包含特定文本的所有文件
原文链接:https://rumenz.com/rumenbiji/linux-find-strings.html
入门笔记
2022/07/21
3.7K0
linux 上查找包含特定文本的所有文件
grep > grep -rnw '/path/to/somewhere/' -e 'pattern' -r或者-R是递归的, -n 是行号,并且 -w 代表匹配整个单词。 -l (小写 L) 可以添加只给出匹配文件的文件名。 -e 是搜索过程中使用的模式 除了这些, --exclude, --include,--exclude-dir标志可用于高效搜索: 只搜索那些具有 .c 或 .h 扩展名的文件 > grep --include=\*.{c,h} -rnw '/path/to/somewhere/'
入门笔记
2022/06/02
3.5K0
01:查找特定的值
01:查找特定的值 查看 提交 统计 1 #include<iostream> 2 using namespace std; 3 int a[10001]; 4 int main() 5 { 6 int n; 7 int ans; 8 cin>>n; 9 for(int i=1;i<=n;i++) 10 { 11 cin>>a[i]; 12 } 13 cin>>ans; 14 for(int j=1;j<
attack
2018/04/03
1.9K0
所有实现IAnimal接口的实例对象
如果我们想要一次性将所有实现了IAnimal接口对象Cry方法的实例全部执行一遍,只能一个对象一个对象的初始化,然后调用cry方法。这样太麻烦,我们可以通过动态创建对象并执行对象的方法来实现这个效果。遴选真题下面,我们将开始动态创建所有实现。第一步,我们需要先获取到所有实现了IAnimal实例对象。现在,我们已经得到了所有实现IAnimal接口的实例对象。讲道理来说,我们就可以用Activator动态创建这些对象了。我们可以使用下面的代码http://lx.gongxuanwang.com/sszt/23.htm
用户7737280
2021/11/27
5060
Linux 查看命令归属哪个包?Linux 查看linux 哪个包包含特定命令?fedora 查询哪个包提供特定命令;ubuntu 查找哪个包提供命令;
在 fedora 和 centos 等 redhat 系列中,命令: yum provides tc [root@dock ~]# yum provides tc iproute-tc-5.0.0-2.fc29.x86_64 : Linux Traffic Control utility Repo : @System Matched from: Provide : tc iproute-tc-5.0.0-2.fc29.x86_64 : Linux Traffic Control uti
西湖醋鱼
2020/12/30
2.8K0
SpringBoot实现接口提供下载文件
public ResponseEntity<FileSystemResource> export(File file) { if (file == null) { return null; } HttpHeaders headers = new HttpHeaders(); headers.add("Cache-Control", "no-cache, no-store, must-revalidate"); headers.add("C
JQ实验室
2022/02/10
1.5K0
[C#]获得WindowsForm上所有特定类型的控件
本文为原创文章,介绍了如何通过C#获得WindowsForm上所有特定类型的控件。首先,定义一个泛型方法ChildControls,该方法接受一个Control类型的参数control,并返回一个IEnumerable<TControl>类型的结果。然后,在泛型方法中,使用OfType方法筛选出control的子控件,并利用SelectMany方法将子控件中的每个元素再次递归调用ChildControls方法,最终得到所有特定类型的控件。该方法可以用于获取WindowsForm上所有特定类型的控件,包括子控件和布局控件等。","author":"无", "source":"C#
CNXY
2017/12/25
1.6K0
[C#]获得WindowsForm上所有特定类型的控件
八. 实现房间的新增,查找,删除,修改接口实现
本期代码量较大,且涉及多表操作逻辑复杂建议配合目录食用!每个功能的编写顺序都是Service=>ServiceImpl=>Dao=>DaoImpl 最后再用Controller调用Service完成接口的实现 前期准备 本篇的验证都是基于token进行操作,所以需要先准备一个token生成器的test方法!最后将生成的token保存到请求头的token中! class TokenUtilsTest { @Test void sign() { // 如果不能使用buil
用户8988577
2022/12/27
5090
.NET实现之(WebService数据提供程序)
说起数据提供程序大家都不陌生,数据提供程序的作用就是以统一的接口去访问不同的数据源,如OledbProvider、SqlServerProvider、OrcaleProvider等等;不同数据源的访问其实是不一样的,微软数据源的访问方式从ODBC到ADO.NET经历了很多路程,各大数据源提供商,都在不断的生产不同结构的数据库,为了以统一的接口去访问各种不同的数据源,微软的.NET为我们提供了ADO.NET,我们通过ADO.NET可以很方便的访问不同厂商生产的不同数据库,ADO.NET也为后期自定义数据提供程序规定了一套接口,只要我们自己去实现它就可以用同一种方式,访问我们自己的数据源,我们可以通过封装访问我们的XML数据源、文本数据源、二进制数据源、WebService数据源、对应用程序员来说,可能有很少一部分人去关注后台的具体实现的细节;对于刚毕业的学生来说,大部分的知识还没有转变成对技术的主观思考,刚刚接触数据提供程序可能有点陌生,所以我们尽可能的将复杂的东西进行简单化,让不需要接触后台代码的程序员就不要接触,减少思考的时间;
王清培
2022/03/14
5750
.NET实现之(WebService数据提供程序)
如何在Mac上查找所有32位应用程序
最新更新的macOS Catalina 10.15将不支持32位应用,如果您不确定32位或64位应用程序是什么,那么您会很高兴知道Mac OS在“系统信息”中提供了一个方便的工具,可以快速向您显示所有64位或非64位应用程序。
MAC先森
2019/10/09
2.5K0
pycharm所有文件中查找_python查找文件
PyCharm的Find in Path功能提供了全局查找功能,快捷键为Ctrl + Shift + F。Find则是在当前文件查找,快捷键为Ctrl + F。这两个个功能非常实用。
全栈程序员站长
2022/09/25
2.7K0
pycharm所有文件中查找_python查找文件
接口的所有权之争
在 一文get到SOLID原则的重点 和 SOLDI原则之DIP:依赖倒置原则 里提到过DIP (依赖倒置原则)里提到过接口所有权的问题。今天再次聊下接口所有权。
coderidea
2022/06/08
4940
接口的所有权之争
使用left join查找用户的所有同事
为了找出某个用户所在组织(部门)的所有员工,即该用户的所有同事包括他自己,常见的做法是通过用户找到他所在的组织(部门),然后再通过部门找到所有的员工。而我在实践中发现了另外一种做法,不知道好坏,仅供参考。
用户3579639
2018/10/22
1.1K0
linux中查找所有已安装的字体
介绍 有一种快速的方法可以在你的 Linux 中找到所有已安装的字体。 在本文中,我们将使用fc-list命令列出Linux 系统上的所有字体和样式。 列出所有字体 要列出 Linux 系统上所有已安装的字体,请运行以下命令 > fc-list /usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf: Nimbus Mono PS:style=Italic /usr/share/fonts/urw-base35/D050000L.t1: D050000L:st
入门笔记
2022/06/02
8.2K0
WordPress 6.0 新增了特定的对象类型的注册接口
在进行 WordPress 二次开发的时候,如果处理过文章类型注册,就有可能使用过 register_post_type_args filter,并且使用的时候,都会执行文章类型检查,确认是针对特定的文章类型的注册参数进行处理,而不是对所有文章类型的注册参数进行处理。
Denis
2023/04/13
4870
yii2进行接口开发,比较优化的curd接口(提供sql)全方位提供
第一:虚拟域名,看我博客,就知道啦.美化url也是啦(必须进行url美化+虚拟域名才能使用啊啊啊) 第一步: 把backend复制一份,改名为api. 第二步: 在common/config/bootstrap.php下粘贴下面这个代码.
贵哥的编程之路
2022/05/06
4640
yii2进行接口开发,比较优化的curd接口(提供sql)全方位提供
YbtOJ 825「计算几何初探」三角查找
他想要知道,是否存在三个点 (x_A,y_A),(x_B,y_B),(x_C,y_C),满足它们构成的三角形的面积 恰好 为 m。
yzxoi
2022/09/19
2160
点击加载更多

相似问题

查找实现特定接口的所有类

64

查找实现特定接口的所有Java beans

33

从程序集中查找实现特定接口的类型

13

查找类实现的所有接口

10

查找所有实现接口的EJB

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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