问题标签 [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 投票
1 回答
940 浏览

flutter - 如何在 Flutter Dart 中实现插件架构

我想在 Flutter Dart 中实现一个插件架构。流程如下: 1. 用户下载应用。2. 用户从我们的网站加载插件。3. 应用程序查看插件是否实现了接口。4. 如果实现了接口,则将信息和小部件从插件加载到应用程序。

我已经在 C# 中使用运行时编译的 DLL 加载实现了相同的过程,但无法为 Flutter 找到它。

我查看了互联网上以前的一些问题和资源,我发现最接近的是https://pub.dev/packages/plugins但该插件在 Dart 2 中不受支持且已弃用

这是我在 C# 中实现的代码。

0 投票
1 回答
787 浏览

java - 动态插件架构。从 Spring Boot 应用程序的目录中加载 jar 文件

我知道这个问题在这里和那里突然出现,但是关于这个的帖子已经很老了。
我有一个 Spring Boot 应用程序。我需要允许开发人员开发插件、实现接口并允许我的应用程序在启动时动态加载它们。
我不需要在运行时发现,在启动时加载就足够了。
我不希望我的客户开发微服务。我想要将加载到应用程序中的进程模块。
编写带有插件的 XML 文件以加载列表是一种选择,尽管我更喜欢尽可能简单的配置,如果可以避免这种需要,那就更好了。我看到了一些选择:

  • OSGi(对我的需求非常重要)
  • JPF(2007 年最后一次更新)
  • JSPF(我什至找不到这个的 github 页面)。

我真的想要一些快速简单的东西,而不需要陡峭的学习曲线。如前所述,它应该可以很好地与 Spring Boot 配合使用。我有哪些选择?

0 投票
1 回答
2220 浏览

angular - Angular App 无需重新编译即可动态加载插件

我正在尝试开发我的 Web Api (NET CORE) 可插件应用程序的前端。我想使用 Angular 9,但我不是 Angular 专家。

我的后端设计为可扩展的,在启动时它会在指定的文件夹中监视,如果存在一个或多个包含扩展基本应用程序(如插件)的逻辑的 dll 文件,它会加载它们。我想在前端使用类似的方法。我尝试了不同的解决方案并阅读了很多文章,但很难找到想要在编译时导入未知插件的人。

我尝试了惰性模块(从这个开始: https: //www.mokkapps.de/blog/manually-lazy-load-modules-and-components-in-angular/),这将是完美的,但使用它我必须知道实现编译我的角度应用程序之前的插件(模块),因为如果我想使用模块,我必须在我的主应用程序中使用导入功能。

因此,我进行了更多搜索,在文章使用 Angular CLI 和 Angular 5 在运行时动态加载新模块之后,我尝试了 System.Js 方法,但我找不到适用于 Angular 9 的有效解决方案。

我很确定我不是唯一一个会创建一个可插入的 Angular 应用程序来加载插件而不重新编译主应用程序的人。

我需要一些建议来遵循正确的方法或使用插件架构的角度应用程序的工作示例。

0 投票
1 回答
149 浏览

c# - C#中两个插件之间的通信

我有两个插件在第三方主机应用程序中工作。该主机有一个名为 的事件DocumentOpened

我从插件 A 和插件 B 订阅此事件。显然插件 A 和插件 B 彼此不认识。我想要实现的是在 B 处理其事件后再次将控制权交给插件 A。

现在不知何故,在插件 A 中执行一些东西!再次进入B后,我不知道如何将控制权返回给A!

所以让我们说在这一切完成之后调用 PluginA.Method() !

0 投票
0 回答
34 浏览

c# - Microsoft ASP.NET WebHooks 是构建插件架构的可行方法吗?

我正在为第三方设计一个架构,以便能够通过插件向我的 ASP.NET MVC Web 应用程序添加和扩展功能。我正在考虑使用 Microsoft ASP.NET WebHooks 作为一种机制,使用异步回调和挂钩将插件的功能集成到我的应用程序中。该应用程序是一个支付网关,我需要第三方开发人员为该应用程序添加更多功能。它是否是一个可行的架构,以及构建这样一个插件架构的替代方案是什么。

0 投票
1 回答
67 浏览

c# - 在(隔离的)Azure 函数中运行用户制作的 C# 代码是否安全?

我正在研究某种插件架构,人们可以自己提交一小段 C# 代码,它会在 Azure 上每小时执行一次。

这是否安全,或者它们是否可以轻松破坏您的整个 Azure 环境?还有其他解决方法吗?

我正在考虑使用 IronPython - 我想在那里建立硬边界更简单,但我实际上更喜欢使用 c#。

更新

需要明确的是:我主要关心的是安全性,而不是 Azure 成本。这将类似于保留实例,或者至少是成本有限的东西。

有人上传比特币矿机,而我在两天后发现的风险是我可以忍受的。

我无法忍受的是,这个人实际上可以访问所有与 Azure 相关的东西,比如凭据等。

0 投票
1 回答
100 浏览

c# - 如何在模块化应用程序中使用棱镜范围的 RegionManager?

在棱镜文档RegionManager中,以某种方式创建了一个作用域,如下所示:

我有一个模块化应用程序,其中视图位于另一个模块中,并且该区域位于主程序集中。每个模块中都有一些区域,我希望它们具有相同的视图,然后相同的视图位于主程序集中。这张图可以更好地解释它:

在此处输入图像描述

因此,如果我想region.Add在模块中使用该方法,我无法实例化视图,因为它位于主程序集中。

我想到的另一种方法是使用视图发现,即使用RegisterViewWithRegion(string regionName, Type viewType),因为我可以在我可以访问的主程序集中调用此方法viewType,并使用regionName我在模块中传递给此方法的方法。但问题是模块中不能有同名的区域。

我最终做了我在这个答案中写的,但是我的经理说我通过RegionManager在视图模型中创建违反了 MVVM。

RegionManager在这种情况下使用范围的正确方法是什么?

0 投票
0 回答
29 浏览

javascript - 如何导入上传的 JS 文件?

我有一个使用本文中的插件架构的 Angular 应用程序在本文 中,构建 bundle.js 文件是使用.import(filepath). 我想要做的不是导入保存的文件,而是上传文件并导入该文件。

我知道如何通过使用以下代码上传来读取和评估 JS 文件。但是,我不确定如何使它与 Angular 构建文件一起使用。任何想法?

0 投票
0 回答
36 浏览

java - Spring Boot - 构建在运行时加载和卸载插件的插件架构的最佳方式

我正在编写一个 Spring Boot API 应用程序,它必须具有插件架构。下面是一个典型的旅程:

  1. 我的应用程序可以执行任务(接受一些输入并返回输出)
  2. 我有一个TaskExecutor用一些方法调用的接口(例如execute(Object... inputArgs):)
  3. 我的应用程序的用户编写了一个插件来处理特定任务(用户只需实现该TaskExecutor.execute(Object... args)方法以满足任务的要求)。该插件被打包为.jar
  4. 我的应用程序中有一个名为Install new Plugin的屏幕,用户可以在其中上传.jar包含插件的文件。例如,用户上传了一个名为的新插件并定义了一个名为Send Emailsend-email-plugin-1.0.jar的新任务类型。
  5. 上传后,系统会将 jar 加载到其类路径中。
  6. 每当用户创建一个类型为Send Email的新任务并运行它时,就会调用TaskExecutorin 的实现。send-email-plugin-1.0.jar

我想满足以下要求:

  1. 插件应该在运行时加载
  2. 它应该.jar按需卸载/更新(当有新文件时)
  3. 我必须能够对其进行沙箱处理并允许/限制对主机上某些资源的访问。
  4. 宿主应用程序不需要beans从插件访问任何内容 - 我们可以将插件视为无弹簧部件(因为没有更好的术语)

我浏览过有关OSGiPF4j和其他的文章,但似乎无法完全理解它们——它们对于我的用例来说看起来很复杂(我不确定)

到目前为止我已经尝试过:

作为一段非常基本的代码,我尝试做这样的事情(假设我将用户上传的 jar 文件存储在文件系统的某个位置)。

它能够在运行时加载插件并执行作业。但是,显然它不会执行以下操作:

  • 不处理更新(如果我想将插件升级到 2.0 版怎么办?)
  • 它不是沙盒的。拥有对服务器的完全访问权限。我怎样才能防止这种情况?
  • 我必须考虑的任何线程安全/漏洞?

请有人指出我正确的方向。

谢谢,斯里拉姆

0 投票
0 回答
43 浏览

android - 使用 MAUI 的跨平台插件架构

我的目标是使用 MAUI 在 Android/Windows 上创建应用程序,并且由于我希望能够通过插件向该应用程序添加更多功能,因此我想创建一些简单的插件系统。
这个插件应该能够订阅域事件,添加组件(如菜单项和“页面”组件,将在菜单单击后显示在应用程序中),相互通信。那么,有没有办法跨平台呢?
如果只是windows,我只会创建插件dll,在应用程序启动时我需要加载它们,找到每一个IPlugin或类似的,初始化它们等等。
但是在Android上存储在哪里?如何在 Android 上编译/加载这个插件?(未来不仅是 Android,还有 iOS 和 Mac)

PS 我对 MAUI 的东西非常陌生,需要学习很多东西,所以感谢完整的答案 PPS 不是以英语为母语的人,对错误感到抱歉