我正在尝试添加插件到我的游戏,我想要实现的是这样的:
>插件将是我的或第三方,所以我想要一个解决方案,崩溃的插件不意味着崩溃的主要应用程序.
常常调用插件的方法(例如由于绘制游戏对象).
我到目前为止发现的
> 1)http://www.codeproject.com/KB/cs/pluginsincsharp.aspx – 简单的概念,似乎应该能很好地工作.由于插件在我的游戏中用于每一轮,我将足以添加Restart()方法,如果不再需要插件Unload()方法GC应该照顾.
> 2)http://mef.codeplex.com/Wikipage – 管理扩展框架 – 我的程序应该在.NET 3.5上工作,我不想单独添加任何其他框架我想自己写我的插件系统.所以这个解决方案是没有问题的.
> 3)Microsoft提供:http://msdn.microsoft.com/en-us/library/system.addin.aspx,但根据我读过的几篇文章是非常复杂的.
> 4)插件的不同AppDomains.根据Marc Gravell(Usage of AppDomain in C#)的不同AppDomains允许隔离.卸载插件会很容易.性能负载是什么?我需要非常频繁地调用插件的方法(例如绘制对象).
>使用应用程序域 – http://msdn.microsoft.com/en-us/library/yb506139.aspx
> A few tutorials on java2s.com
解决方法
@H_502_20@ 您可以定义插件必须实现的公共接口.然后使用反射,您可以扫描“plugin”文件夹以实现该接口的任何类,然后创建该类的实例.从你的代码只是在界面上工作,并调用所需的方法.关于崩溃,总是确保对“plugin”接口的调用总是封装在try / catch块中.如果发生异常,您可以随时处理该插件