我想问在 MVC 4 中是否存在一种方法如何基于存储在数据库中的外部程序集动态扩展 MVC 应用程序。
先决条件
- 每个外部组件都将引用主核心组件。
- 每个控制器都将继承基本控制器,这将使核心项目中的数据库上下文可访问,并提供与核心相关的基本功能的机会
- 控制器名称在区域内是唯一的 - 核心和插件一起
- 领域将在核心应用程序中定义
- 插件仅依赖于引用的核心程序集
想要的场景:
在启动时,应用程序将从给定源加载所有程序集 - 假设它们已经存在于 bin 文件夹中并且尚未在主应用程序中引用。
通过反射器将有关已加载程序集的信息存储到信息对象的集合中,并通过某种服务进行注册,从中可以通过调用键(控制器名称和操作名称)或其他使它们对核心程序集可见/可访问的机制来调用外部控制器. Info 对象将包含对控制器的类型引用、控制器名称和操作集合。
调用控制器操作时 - 路由过滤器或服务将搜索核心程序集/插件信息集合中是否存在控制器和操作。
实例化控制器/调用动作并传递参数,使用核心布局渲染外部视图或重定向到错误控制器和处理异常
在 win32 表单中,此场景可通过激活器和反射器实现。当我想更新插件时,只需要替换数据库中的 Dll 并重新启动 IIS。
主要目标是创造开发插件的可能性,而无需更改或重新部署核心应用程序到服务器,并通过将新插件上传到数据库/ bin 文件夹来使新插件工作。这种方法是否可以在 MVC 4 中实现,或者 MVC 应用程序中的所有内容都必须是强类型和强引用的?
如果是,您是否知道一些将外部控制器加载到核心应用程序而不在启动和可调用之前引用它的工作示例,只是简单的示例?