【发布时间】:2013-04-10 18:48:51
【问题描述】:
我想开发一个接受来自用户社区的插件的应用程序,类似于 Chrome 或 Firefox 的做法。这将是一个 Web 应用程序,因此单个用户的应用程序的每个“实例”都将运行不同的插件(插件将作为单例实例加载,但仅对某些用户是“活动的”)。我正计划在 .NET 中实现应用程序,并尝试为插件模型提出一个架构。
这是我想要的属性:
- 插件完全在我的核心应用程序之外构建,作为单独的程序集。
- 插件在自己的“锁定”、低信任环境中运行。可能是一个单独的 AppDomain。
- 插件只能通过我提供的 API 起作用。例如。我会将某种外观作为接口传递给它们,它们只能调用它,而不能调用任何其他程序集。我不能拥有可以在 Web 服务器上任意执行操作的插件,例如影响文件系统。
- 插件中的致命崩溃不会影响核心应用程序的稳定性。
似乎 System.AddIn 是我最好的选择,但我不清楚如何强制加载的插件仅通过我提供的 API 工作,而不加载任何其他程序集。 System.AddIn 是否提供该功能?另外,System.AddIn 可以与 ASP.NET / IIS 一起使用吗?
除了 System.Addin,我还有哪些其他选择?
【问题讨论】:
-
你看过 MEF 吗?
-
您可以看看这个由 Microsoft 创建的 .NET 游戏“Terrarium”,以说明 .NET 的功能。它具有安全插件的概念,因为游戏中的每个生物都是某种插件:terrarium2.codeplex.com
-
@SimonMourier 我会看看那个。如果您想总结他们使用的技术并将其发布在此处,您可以将其转化为答案。
-
@DanielMann MEF 没有提供我需要的隔离或沙盒。 MEF 实际上只适用于“受信任的插件”场景。我正在寻找实现“不受信任的插件”。
标签: .net plugins architecture add-in