使用数据库中的控制器和视图动态加载DLL,存储到HDD并通过激活器激活

时间:2013-08-16 13:48:37

标签: asp.net-mvc-4 dynamic dll

我想问一下,在MVC 4中是否存在一种如何基于存储在数据库中的外部程序集动态扩展MVC应用程序的方法。

先决条件

  1. 每个外部组件都会引用主核心组件。
  2. 每个控制器都将继承基本控制器,这将使核心项目的数据库上下文可访问,并提供与核心相关的基本功能的机会
  3. 控制器名称在区域内是唯一的 - 核心和插件一起
  4. 区域将在核心应用程序中定义
  5. 插件仅依赖于引用的核心程序集
  6. 通缉情景:

    1. 在启动时,应用程序将加载来自给定源的所有程序集 - 假设它们已经存在于bin文件夹中,并且尚未在主应用程序中引用。

    2. 通过反射器将加载的程序集的信息存储到信息对象的集合中,并通过某种服务注册,从中可以通过调用键(控制器名称和操作名称)或其他一些制作它们的机制来调用外部控制器核心组件可见/可访问。 Info对象将包含对控制器,控制器名称和操作集合的类型引用。

    3. 调用控制器操作时 - 路由过滤器或服务将搜索核心程序集/插件信息集合中是否存在控制器和操作。

    4. 实例化控制器/调用操作并传递参数,使用核心布局渲染外部视图或重定向到错误控制器和hadle异常

    5. 在win32表单中,此场景可通过激活器和反射器实现。当我想更新插件时,所有需要的是替换数据库中的Dll并重新启动IIS。

      Maing的目标是创建开发插件的可能性,而无需将核心应用程序更改或重新部署到服务器,只需将新插件上传到database / bin文件夹即可使其工作。这种方法是否可以在MVC 4中实现,或者MVC应用程序中的所有内容都必须是强类型和强引用的?

      如果是,您是否了解将外部控制器加载到核心应用程序而不在启动和引用之前引用它的一些工作示例,这只是一个简单的例子?

1 个答案:

答案 0 :(得分:0)

你看过MEF加载带有mefcontrollerfactory的库来实例化控制器吗?

此网站应该可以帮助您入门

http://www.fidelitydesign.net/?p=259