问题标签 [plugin-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
197 浏览

java - java中基于插件的开发核心内部架构

我发现了以下用于开发插件的样式

1:java.util.ServiceLoader

工作方式:在 META-INF/services 中查找并获取注入服务

向其他实现者提供抽象类

2:java.net.URLClassLoader

工作方式:从 jar 文件和 getinstance 加载所需的类。

为其他实现者提供接口

3:从属性文件加载

工作方式 3:从实现提供的接口的属性文件中加载类名

为其他实现者提供接口

示例代码 3

我找到了 3 种自己的插件实现方式。

除了上面提到的还有其他方法吗?

maven 和 jenkins 等它的核心级别是一样的风格还是他们有一些更高级的方式? 有没有人对此有好主意。

请不要建议使用这个框架和那个,我想学习和理解核心的内部工作方式。谢谢

0 投票
2 回答
3133 浏览

c# - 从异常中获取文件名和行号

我有 ac# windows 应用程序(在插件架构中开发),我想从我的应用程序中记录所有未处理的异常。我能够捕获所有异常。

我想从 Exception 中读取文件名和行号。(在.Net 2.0中)

我用了

它在我的应用程序中的异常情况下工作正常,如果参考 dll 中有任何异常我没有得到文件名和行号

0 投票
1 回答
110 浏览

python - 如何使用 Python 实现运行时对象(不同)实现

我的要求是我有一个标准框架,可以通过 3 个步骤生成 HTML 到 PDF:

1)从我们的数据库中获取内容并从中创建含义,读取 XML 并覆盖或决定设置等 -预处理

2) 使用预处理数据创建 HTML 模板 - render_template

3)运行 aa HTML to PDF Converted 并取回 PDF。-调用服务

现在 , 有时 可能 需要 不同 的 PDF 引擎 并且 实现 可能 会 改变 ... 其中 甚至 有 可能 需要 非常 严格 的 数据 或 专有 设置

所以我可能需要扩展 1覆盖 2覆盖 3并且我想让这个实现可配置并轻松切换。

我正在考虑创建一个基类,然后创建实际上将成为运行时对象的 Foo.py 实现和 Bar.py 实现。我怎样才能用简单的 Python 得到这个?

我能想到的一个可怕的方法是:

谁能给我很好的指导来解决这个问题?基本上我想要 Foo(Base) 或 Bar(Base) 这应该就像读取配置并将其映射到那个 .

我当前的模块布局是:

模块.py

  • 基础.py
  • foo.py
  • 酒吧.py
  • unknown.py 应该很容易扩展。
0 投票
1 回答
967 浏览

php - PHP 中的钩子/插件架构

我需要为 PHP 中的项目实现挂钩/插件架构。我发现了很多用 ph​​p 编写的文章和示例以及一些关于插件架构的信息,但我仍然无法清楚地理解它是如何工作的。这对某人来说可能是一个非常愚蠢的问题,但我对这些概念很陌生,真的需要找到一个明确的答案。钩子在插件架构中的真正作用是什么?钩子如何使应用程序更具可扩展性。我很想看到一个来自 PHP 的例子的答案。

谢谢你。

0 投票
2 回答
36 浏览

java - Maven 项目作为另一个 Maven 项目的“插件”

我有两个 Maven 项目:

  • 其中之一是一个简单的(基于 Quartz 的)调度框架
  • 另一个是更重的项目,充满依赖和资源文件。在构建期间,这些被打包在 jar 文件之外的单独目录中(并且项目的类路径配置为这些依赖项)

我希望第二个被第一个定期调用 - 但尽可能将它们分开,并且不会弄乱资源和依赖项文件夹。

做这个的最好方式是什么?

谢谢,克里斯

0 投票
1 回答
944 浏览

c# - 使用 Ninject 将 IJob 从外部程序集注入 Quartz.net 调度程序

我正在尝试创建一个可以使用 Ninject 加载外部程序集并使用 Quartz.net 按计划运行它们的应用程序。

我已经成功地实现了 Quartz.net 来注入自身,并在同一个程序集中运行基于 IJob 实现的类的作业。这很好用。

我想更进一步,创建一个插件架构。

我创建了一个所有插件都会使用的通用接口,IPlugin,这个接口也实现了 IJob。这在主应用程序中被编译和引用,每个插件都实现它。


然后我有一个实现 IPlugin 的测试插件。非常简单,它只是输出一个绿色的时间戳。


在我添加 Quartz.net 框架之前,我会像这样加载和执行插件。插件将加载,运行一次,应用程序将按预期结束。


现在我需要插件按计划运行,但它仍然必须通过 Ninject 加载,并且主应用程序应该与类型无关,它应该只知道它是一个 IJob 并且能够按照在某些配置中定义的计划运行它. 这是我遇到的麻烦。

我有我的 NinjectJobFactory


我的工厂提供商和调度程序提供商。


以及外部 XML 文件中的一些配置。


基本上我不知道该怎么做。我已经根据我在谷歌/这里找到的东西尝试了一些东西,但没有任何帮助。任何建议将不胜感激。

0 投票
1 回答
9498 浏览

go - Golang 事件:用于插件架构的 EventEmitter / 调度程序

在 Node.js 中,我能够使用 EventEmitter 复制并在 CMS 核心中构建一个钩子系统,然后插件可以附加到它,从而相当容易地制作 WordPress 克隆。

我现在需要为用 Go 编写并移植到 Go 的 CMS 提供相同级别的可扩展性和核心隔离。基本上我现在已经完成了核心,但为了使其真正灵活,我必须能够插入事件(钩子)并将插件附加到这些钩子上并具有附加功能。

我不关心重新编译(动态/静态链接),只要您不必修改核心来加载插件 - CMS 核心永远不应该被修改。(如 WP、Drupal 等)

我注意到有一些相当未知的项目,试图在 Go 中实现事件,看起来有点类似于 Node.js 中的 EventEmitter:

https://github.com/CHH/eventemitter

https://github.com/chuckpreslar/emission

由于上述两个项目并没有获得太多的知名度和关注度,我觉得这种思考事件的方式现在可能是我们在 Go 中应该如何做的事情?这是否意味着 Go 可能不适合这项任务?通过插件制作真正可扩展的应用程序?

Go 似乎没有在其核心中内置事件,并且 RPC 似乎不是将插件集成到核心应用程序中的有效解决方案,因为它们是原生内置的,并且好像它们是主应用程序本身的一部分。

将插件无缝集成到您的核心应用程序中的最佳方式是什么,以实现无限的扩展点(在核心中),而无需在每次需要连接新插件时操作核心?

0 投票
1 回答
122 浏览

c# - 如何使用日志记录组件的灵活性

我的团队正在开发一个插件项目,其中主机应用程序协调插件工作(每个插件都有特定的功能,将在单独的线程上执行)。我正在编写主机应用程序并定义 IPlugin 接口;其他开发人员将参考我的 IPlugin 界面并开发他的插件。
我的团队提出了一个问题:一些开发人员使用 Nlog 来记录他们的插件工作,但其他开发人员使用 Log4Net。
我的问题是:如何让每个插件都可以使用它喜欢使用的日志组件?
谢谢!

0 投票
0 回答
558 浏览

java - 如何在我的 Java 应用程序中添加插件架构?

我有一个 Java 命令行应用程序,它在运行源代码中定义的一些步骤后创建一个报告文件。现在我想将这些步骤与我的应用程序的核心功能分开,因为我希望应用程序可以运行动态加载的“步骤”。这意味着,我的应用程序的核心功能是创建报告文件。并且分开的“步骤”应该提供报告的内容。

我决定将这些步骤实现为我的应用程序中的插件。使用该应用程序的每个人都可以使用现有的或自己编写的插件对其进行扩展。

现在我的问题是,就我而言,为我的应用程序开发插件系统的最佳方式是什么?我进行了很多研究并获得了很多意见。我无法决定我应该如何解决这个问题。

SO的有趣问题:

在我的研究中,我收集了一些信息,我可以如何解决它:

  • 使用 ServiceLoader:一个简单的服务提供者加载工具。
  • 使用 NetBeans 中的 org.openide.util.Lookup(动态注册和查找组件)
  • 定义自己的 Plug-in 接口,必须从插件中实现。然后使用 Java ClassLoader 加载这些类并创建它们的实例。
  • 使用 OSGi,但我认为这是为了我的目的而“大”。

解决我的问题的最佳方法是什么:

  • 一个优雅的插件架构(可能使用一些设计模式),
  • 易于维护的源代码,
  • 并且易于开发插件。

我使用插件系统的方法是否正确?或者还有什么我可以用的吗?

0 投票
3 回答
12470 浏览

java - Implementing plugin architecture in annotation based Spring Boot Application

I want to implement plugin architecture in Spring Boot application. Let me explain my scenario. I have a main application, which starts the server, manages security, etc. The app is like the root of my final product which will include this root app and other plugins added to it.

Now, the plugins are Spring Boot application themselves, which I may add to the root app by dynamically searching for jars in the specific path or by added them to project dependency as library.

Plugins have their own configurations and are like apps running inside the main root app. Let's say if the root app runs the server, the plugin app may have all the controllers (endpoints), beans etc that provide functionality to my product.

This is the premise, now what I want to know is,

  1. How can I achieve this architecture?
  2. How will the root app communicate with the plugins?
  3. Will they have separate application contexts?
  4. How can I boot and configure child app from the root app?
  5. When the application receives the request from clients how can I route the request to specific controller inside specific plugin considering I may have many plugins.

I am confused about the concept here, and how it can work. Any sort of help is appreciated. If there is some example that anyone can provide, that will be just wonderful.