问题标签 [extensibility]

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 投票
5 回答
1908 浏览

c# - .NET 中的插件式架构

我正在尝试实现类似应用程序的插件。我知道已经有几种解决方案,但这只是概念的证明,仅此而已。这个想法是让应用程序主应用程序默认几乎没有功能,然后让插件相互了解,让它们实现所有需要的功能。

出现了几个问题:

  1. 我希望插件在运行时通过我的应用程序相互了解。这并不意味着在代码时他们不能引用其他插件的程序集,以便他们可以使用它的接口,只是插件功能初始化应该始终通过我的主应用程序进行。例如:如果我同时加载了插件 X 和 Y 并且 Y 想要使用 X 的功能,它应该通过我的应用程序“注册”它的兴趣以使用它的功能。我必须在我的应用程序中有一种“字典”,用于存储所有加载的插件。在注册对我的应用程序感兴趣后,插件 Y 将获得对 X 的引用,以便它可以使用它。这是一个好方法吗?
  2. 在编写使用 X 的插件 Y 时,我需要引用 X 的程序集,这样我就可以针对它的接口进行编程。那有版本控制的问题。如果我针对插件 X 的过时版本编写插件 Y 怎么办?我是否应该始终使用所有程序集所在的“中心”位置,始终保持最新版本的程序集?

是否有专门针对.NET 的此类设计的书籍?

谢谢

编辑:我认为人们正在远离我提出的 2 个问题。我可以查看 MEF 和#develop,但我想获得对我提出的问题的具体答案。

0 投票
3 回答
879 浏览

c# - dll自定义业务逻辑

我有一个项目,其中一些业务逻辑被分离到一个 DLL 项目中,这个 DLL 包含该软件为特定客户提供的业务逻辑。

现在我在另一个具有不同规则的客户端想要实现该软件后遇到了一个问题,我需要应用程序根据使用该软件的客户端加载适当的 dll,考虑到该 dll 包含相同的函数名称但不同的主体。

我正在使用 c# 3.5,有没有办法这样做?

0 投票
2 回答
335 浏览

powershell - 是否可以在 PowerShell 中扩展索引器?

PowerShell 的类型扩展工具很简洁,但我还没有找到扩展索引器的方法——如果存在的话。我尝试为索引器属性(在 System.String 的情况下为 Chars)添加一个 ScriptProperty,为 getter(get_Chars)添加一个 ScriptMethod,但这两种方法似乎都没有成效。有可能吗,还是我在浪费时间?:)

[编辑] 显然,正确的成员类型是 ParameterizedProperty,但是当我尝试这样做时,我得到:

0 投票
7 回答
4351 浏览

extensibility - 代码实际上应该具有多大的可扩展性?

我刚刚开始了一份新工作,我的新老板跟我谈过的一件事就是代码的寿命。

我一直在编写代码以使我的代码具有无限的可扩展性和适应性。我想如果将来有人要更改我的代码,那应该很容易做到。

但我从来没有真正清楚地知道未来应该有多远。

所以我的新老板告诉我不要为未来 3 年多的时间写代码,他的理由是技术变化、程序过期等。

起初我有点吃惊,并认为他是一个糟糕的工作,但我考虑的时间越长,我就越喜欢这个概念。

有没有人对你应该编码到多远的未来有意见?

0 投票
2 回答
375 浏览

nhibernate - NHibernate:完全覆盖基域实体

我有一种情况,我有一个Common.Domain.Personand Specific.Domain.Person

第一个应该作为通用包的一部分提供。
当必须定制通用包以适应特定项目的需求时,会出现第二个。

在对象模型中,可以很容易地通过继承来实现。
然而,在 NH 映射中,我遇到了一个小问题。

我可以创建 NHibernate<subclass>映射,但这需要我使用鉴别器。但是,我知道如果继承了特定的人员类,那么在该特定项目中将永远不会使用公共类实例。

在不向基类添加鉴别器列的情况下实现这一点的最佳方法是什么(因为没有不同的情况可以区分)?

0 投票
8 回答
341 浏览

php - 我是 OOP/PHP 的新手。类中可见性和可扩展性的实用性是什么?

我显然对这些概念是全新的。我只是不明白您为什么要限制对属性或方法的访问。看来您只是根据预期的结果编写代码。为什么要创建私有方法而不是简单地不调用该方法?是用于迭代对象创建(如果我说得对的话)、多开发人员的情况(不要弄乱其他人的工作),还是只是为了不意外弄乱自己的工作?

0 投票
2 回答
2923 浏览

c# - 如何在 C# 中开发基于动态插件的功能

我一直在寻找为我的应用程序提供插件支持的不同方法。理想情况下,我将创建一个核心功能,并根据不同的客户开发不同的插件/插件,例如导入、导出数据等... 有哪些方法可用于通过插件架构使 C# 应用程序可扩展?

让我们举个例子。如果我们有一个程序,它包含一个主菜单(文件、编辑、视图等)以及一个显示按制造商分组的不同品牌汽车的树视图(目前是福特、通用汽车)。右键单击汽车会显示一个上下文菜单,其中唯一的选项是“删除汽车”。

您如何开发应用程序以便可以部署插件,以便您可以允许一位客户在 TreeView 中看到一个新品牌,比如本田,还可以扩展汽车上下文菜单,以便他们现在可以“画一辆汽车” '?

在 Eclipse/RCP 开发中,这很容易被扩展点和插件处理。C#如何处理它?我一直在研究开发自己的插件架构并阅读 MEF。

0 投票
2 回答
2607 浏览

visual-studio-2010 - Visual Studio 2010 扩展管理器崩溃

在安装了一堆扩展来试用后,我重新启动了 VS 2010,它开始崩溃。不幸的是,它在打开工具 | 时总是崩溃。扩展管理器。任何想法如何修复和避免完全卸载/重新安装?

事件日志有:应用程序:devenv.exe 框架版本:v4.0.30319 描述:由于未处理的异常,进程被终止。异常信息:System.AggregateException 堆栈:在 System.Threading.Tasks.TaskExceptionHolder.Finalize()

0 投票
2 回答
583 浏览

python - Python 作为 Python 应用程序中的最终用户脚本

我有一个用 python 编写的应用程序。我想让我的用户能够通过允许他们运行自己的脚本来操作应用程序对象。他们很可能在脚本中出错。如果出现错误,我想确保应用程序不会停止运行。我想在我的应用程序中嵌入一个调试器来帮助他们调试他们的脚本。

例如,我在我的应用程序中的 shape.py 中定义了一个点类:

我想让他们能够运行如下脚本:

我认为这必须使用解释器、调试器,但我不确定有两个方面,1)如何将在应用程序中创建的对象公开给脚本,以及 2)如何确保应用程序不会停止如果一个错误导致脚本停止。

我敢肯定这之前一定有人问过,但我找不到。欢迎所有答案。

很多谢谢

大卫

0 投票
1 回答
3343 浏览

c# - 可扩展的 WPF 应用程序 - MEF、MAF 还是简单加载?

(我知道其他 MEF/MAF 问题,但这是一个更具体的问题)

我想创建一个 WPF 应用程序,它基本上只是一个简单的加载项主机、GUI 和设置。所有实际工作将由一个或多个插件完成。它们不需要相互通信,主应用程序将向它们发送用户输入/命令,它们将返回一些结果(例如,要呈现的 WPF UI 元素)。

现在,由于应用程序的核心将基于插件,我需要选择一种管理它们的好方法。我希望能够在运行时加载/卸载/重新加载它们(例如,当找到并下载更新时)。为了稳定性和安全性,它们可能应该在自己的应用程序域和/或进程中运行。

通过一些研究和实验,我得出了三个选择:

  • System.Addin (MAF):看来这可以满足我的所有需求。有一个管道允许同时运行多个版本的 API 以实现兼容性等。但除非我错过了我需要多次创建 API 的东西——主机和插件视图、合同和合同的两个适配器。此外,周围的信息和资源很少(与 MEF 相比),而且大多数文章都是几年前的。我担心这正在慢慢消亡,宁愿不将它用于新项目。

  • MEF:这个看起来比较简单,但也感觉有很多我无法控制的魔法,而且层次没有MAF那么分离。我只想要一个小库,你可以链接到一个新项目,实现接口,插件就完成了。

  • 手动加载:最后一个选项是手动扫描文件夹中的.dlls,使用反射来查找插件类并创建实例。虽然可行,但我宁愿使用一些框架,也不愿手动加载程序集、创建单独的进程/应用程序域等。

那么,哪一个最适合这种应用程序,或者我错过了什么?