1

我正在开发一个 Windows Azure 网站,它根据用户输入修改一些数据并将数据返回给用户。所有数据修改都由每个用户插件处理,这些插件作为 blob 存储在数据库中。

目前,当用户请求一些数据时,我

  • 从数据库中获取该用户的所有插件;
  • 从内存中加载程序集
  • 使用反射查找所有实现共享程序集中定义的插件接口的类;
  • 实例化它们,将它们投射到接口中;和
  • 直接从他们那里调用一个方法,通过引用传递他们需要修改的数据以及任何适当的用户输入。

这工作得相当好,并且允许我为每个用户编写新的插件,这些插件只对他们的数据进行操作。

但是,从长远来看,我希望允许每个用户根据接口编写自己的插件,并通过将它们上传到数据库来安装它们。因此,我需要一些方法来限制插件能做什么和不能做什么。

我已经玩弄了一个基于AppDomains的自定义解决方案,但我还没有找到一种方法让它按照我想要的方式工作。我还查看了Managed Extensibility FrameworkManaged Add-in Framework,但似乎没有一个完全符合要求,MEF 不适合沙盒,MAF 不支持从内存加载插件。

  • 对于我的问题,是否有或多或少的现成解决方案?
  • 如果没有,我应该如何处理自己的写作;我的主机应用程序、最终的“插件运行器/沙盒”、任何接口、合同、适配器等以及它们是用户提供的插件之间的良好依赖关系的整体结构是什么?
  • 我是否应该将插件程序集本地保存在一个临时位置以简化解决它们的工作并允许我使用任何可用的框架?
  • 你能指出我的阅读材料的方向,这将使任务看起来更易于管理(或者更少,如果我应该放弃沙盒用户提供的插件的整个想法)?
4

0 回答 0