我正在开发一个第三方开发人员可以编写插件的应用程序。我一直在研究 Managed Extensibility Framework,这似乎是正确的方法。
不过有一件事,我想阻止插件自由访问应用程序的其余部分(调用单例等),但希望限制通过某个接口进行通信,理想情况下,每个插件都必须“请求”不同事物的权限,例如访问其他插件和用户数据,有什么好方法可以做到这一点吗?
否则我唯一能想到的就是将安全字符串传递给每个方法并混淆代码,但这似乎是一个丑陋的解决方案:P
您需要一个新AppDomain
的作为插件的沙箱,但我认为 MEF 目前不支持将导出加载到单独AppDomain
的文件中(如果不再是这种情况,我相信有人会纠正我)。
如果这对您来说是一个严重的问题,请考虑使用System.Addin
命名空间中的位,并查看有关激活、隔离、安全和沙盒的部分以获取更多信息。它是 MEF 的更强大和安全的替代方案,但灵活性要差得多。
更新:Kent Boogaart 有一篇博文展示了如何同时使用 MEF 和 MAF。