Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插件架构.net maf或mef_C#_.net_Plugins_Mef_Maf - Fatal编程技术网

C# 插件架构.net maf或mef

C# 插件架构.net maf或mef,c#,.net,plugins,mef,maf,C#,.net,Plugins,Mef,Maf,我目前在一个游戏平台应用程序中工作。我希望能够轻松添加新游戏,但游戏应符合特定合同: 游戏必须有一些必要的方法 他们必须接收主程序提供的一些事件 他们必须能够将一些数据发送回程序 如果外部开发人员只需了解界面,就可以轻松地为平台制作游戏,那将是一件美妙的事情 我读过一些问题,比如MEF和MAF,起初我认为MAF对我来说更好,但我不确定。另外,我想我甚至可以制作一些自制的系统,比如,将游戏编译成DLL,然后在运行时检索它们 MAF看起来很好,因为它是隔离的,但由于我并没有真正使用很少的插件,而且正

我目前在一个游戏平台应用程序中工作。我希望能够轻松添加新游戏,但游戏应符合特定合同:

游戏必须有一些必要的方法 他们必须接收主程序提供的一些事件 他们必须能够将一些数据发送回程序 如果外部开发人员只需了解界面,就可以轻松地为平台制作游戏,那将是一件美妙的事情 我读过一些问题,比如MEF和MAF,起初我认为MAF对我来说更好,但我不确定。另外,我想我甚至可以制作一些自制的系统,比如,将游戏编译成DLL,然后在运行时检索它们

MAF看起来很好,因为它是隔离的,但由于我并没有真正使用很少的插件,而且正如我所读到的,MAF很重并且缺乏速度,所以我对我应该使用什么有很多疑问


我是否应该尝试MAF,即使它可能很慢,很难开发,而且它真的适合我所做的吗?

这可能不是你的完整答案,但我会插话说MEF,我确实有经验,但我没有真正的MAF经验。MEF有很多优点,我认为适合您的需要

MEF重量轻,而且使用起来非常方便。它提供了依赖注入

探索的东西很容易使用。只要创建你的目录,你就可以开始跑步了

MEF使插件架构变得非常简单。我完全相信这一点


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

这可能不是你的完整答案,但我会插话说一下MEF,我对它有经验,但我对MAF没有真正的经验。MEF有很多优点,我认为适合您的需要

MEF重量轻,而且使用起来非常方便。它提供了依赖注入

探索的东西很容易使用。只要创建你的目录,你就可以开始跑步了

MEF使插件架构变得非常简单。我完全相信这一点


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

+1此外,如果您决定使用共享dll,您需要格外小心,因为您很可能会丢失System.AddIn MAF的版本控制功能。最好只有其公共成员永远不会更改的程序集(如.NET framework中的程序集)才应由主机和加载项共享。+1此外,如果您决定使用共享dll,则需要格外小心,因为您很可能会丢失System.AddIn MAF的版本控制功能。最好只有公共成员永远不会更改的程序集(如.NET framework中的程序集)才应由主机共享,并且只有在需要隔离和/或版本控制并且您只需要将主机公开给外接程序时,才应考虑外接程序。Visual Studio和MS Office都使用此功能据我所知,是System.AddIn。另外请注意,您可以通过将MEF与Autofac相结合来进行版本控制。仅当需要隔离和/或版本控制并且您只需要将主机公开给加载项时,才应考虑使用System.AddIn MAF。据我所知,Visual Studio和MS Office都使用System.AddIn。还请注意,您可以通过将MEF与Autofac相结合来进行版本控制。