我有一个 ASP.NET 应用程序,它提供前端服务(可视化)和后端服务(数据转换和从后端 SQL 数据库输出一些数据)。我想要以下内容:
可扩展后端 允许其他人上传“插件”以添加其他 REST API
可扩展前端:我目前的前端带有一个顶部 URL 栏,如下所示:
Category-1 Category-2 Category-3
--App11 ---App21 ---App31
--App12
我正在寻找这样的东西:假设我的应用程序有一个简单的管理面板,当有人上传带有 list 文件的兼容“模块”时,应用程序应该将其添加到主应用程序中,并添加指向其中之一的链接基于插件 list 内容的类别。 (可选)将此插件的描述添加到主应用程序网页。
具体来说,我正在寻找以下方面的建议:
- 主应用程序应如何构建?
- 插件的架构应该是什么样的?
- 如何启用类似仪表板的设计并让插件支持它?
我在Joomla中看到过这个,一个内容管理系统,但不确定要遵循什么设计范例来实现这一点。我做了一件愚蠢的事情,并将我当前(巨大)的应用程序设计为从主应用程序链接的单独的 aspx
文件。我不介意重写部分内容,但如果不进行重大重写,是否有可能实现我想要的目标?关于如何实现这一目标有什么建议吗?
最佳答案
基本解决方案:
非常接近裸机,但对于后端,您可以创建一个包含逻辑的 dll,以及一个注册新 GenericHandler 来处理请求的 HttpModule
。使用 web.config 注册插件模块,或使用 Microsoft.Web.Infrastruct.DynamicModuleHelper
到 register your http modules at runtime只需复制到您的垃圾箱中,无需修改 web.config。
可移植区域:
MVCContrib 有一个名为“PortableAreas”的功能,可用于将 UI 和后端代码像插件一样打包到 dll 中。 MVC Controller 可以轻松返回 UI 的 HTML 内容以及 JSON 或 XML,就像 REST Web 服务一样。 MVCContrib 还定义了一个“总线”,插件可以使用它与主机应用程序进行通信。就像“嘿,添加一个指向我的categoryXY 的新链接!”。
看看这些关于可移植区域的博客文章:asp net mvc portable areas via mvccontrib (谈论 MVC2,但也适用于 MVC3)。可以通过nuget下载最新版本:MvcContrib.Mvc3-ci .
ASP.NET MVC 只是“ASP.NET”
因此 Webform 和 MVC 可以存在于同一个应用程序中。 看看这篇关于"consuming a portable area with a web forms application"的文章。基本上,它只是将 MVC 相关的 dll 和配置添加到现有应用程序中,并设置通信。
或者真正看看真正的 CMS,
也许使用一个具有有效的、有文档记录的插件系统才是真正的解决方案。取决于有多少百分比的功能将成为“核心应用程序”的一部分,以及有多少百分比将作为插件开发以及您的需求。
关于c# - 我的网络应用程序应该遵循什么设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004814/