【问题标题】:plugin architecture .net maf or mef [closed]插件架构.net maf 或 mef [关闭]
【发布时间】:2013-01-03 20:39:28
【问题描述】:

我目前正在开发一个游戏平台应用程序。我希望能够轻松地向其中添加新游戏,但游戏应遵守特定合同:

  • 游戏必须有一些必需的方法
  • 他们必须接收一些主程序提供的事件
  • 他们必须能够将一些数据发回到程序
  • 如果外部开发人员只需了解界面就可以轻松地为平台制作游戏,那就太好了

我阅读了一些问题,例如 MEF 与 MAF,起初我认为 MAF 对我来说更好,但我不确定。另外,我认为我什至可以制作某种自制系统,例如将游戏编译为 DLL 并在运行时检索它们。

MAF 似乎不错,因为 隔离,但由于我并没有真正使用小插件,而且当我阅读时,MAF 很重且缺乏速度,我对应该使用什么有很多疑问。

我是否应该尝试 MAF,即使它可能很慢且难以开发,并且它真的适合我的工作吗?

【问题讨论】:

  • System.AddIn (MAF) 只有在需要隔离和/或版本控制并且您只需要将主机暴露给加载项(Visual Studio 和 MS Office 就是这种情况)时才应考虑据我所知,两者都使用 System.AddIn )。另请注意,您可以通过将 MEF 与 Autofac (nblumhardt.com/2011/01/decorator-support-in-autofac-2-4) 结合使用来进行版本控制。

标签: c# .net plugins mef maf


【解决方案1】:

这可能不是您的完整答案,但我会附上 MEF,我确实有经验(我对 MAF 没有真正的经验)。 MEF 有很多优点,我认为它们适合您的需求。

MEF 是轻量级的,而且非常易于使用。它提供了依赖注入。

发现的东西很容易使用。只需创建您的目录,您就可以开始运行了。

MEF 让插件架构变得非常简单。我完全同意了。

虽然 MAF 可以提供隔离,但您必须使内容可远程调用以跨应用程序域调用,这很麻烦。为了防止未处理的异常退出您的主应用程序,您必须在它们自己的进程中创建加载项,这有其自身的局限性。例如,如果您想在加载项之间共享 DLL,则它们需要与共享 DLL 位于同一目录中,或者共享 DLL 需要位于 GAC 中。

【讨论】:

  • +1 此外,如果您决定共享 dll,则需要格外小心,因为您很可能会失去 System.AddIn (MAF) 的版本控制功能。最好只有公共成员永远不会更改的程序集(例如 .NET 框架中的程序集)应该由主机和加载项共享。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多