我想开发一个接受来自用户社区的插件的应用程序,类似于 Chrome 或 Firefox 的做法。这将是一个 Web 应用程序,因此单个用户的应用程序的每个“实例”都将运行不同的插件(插件将作为单例实例加载,但仅对某些用户是“活动的”)。我计划在 .NET 中实现该应用程序,并尝试为插件模型提出一个体系结构。
这是我想要的属性:
- 插件完全构建在我的核心应用程序之外,作为单独的程序集。
- 插件在它们自己的“锁定”、低信任环境中运行。可能是一个单独的 AppDomain。
- 插件只能通过我提供的 API 起作用。例如,我会将某种外观作为接口传递给它们,它们只能调用它,而不能调用任何其他程序集。我不能拥有可以在 Web 服务器上任意执行操作的插件,例如影响文件系统。
- 插件中的致命崩溃不会影响核心应用程序的稳定性。
似乎 System.AddIn 是我最好的选择,但我不清楚如何强制加载的插件仅通过我提供的 API 工作,而不加载任何其他程序集。System.AddIn 是否提供该功能?另外,System.AddIn 可以与 ASP.NET / IIS 一起使用吗?
除了 System.Addin,我还有哪些其他选择?