我正在尝试为我的游戏添加插件,我正在尝试实现的是:
插件将是我的或第三方的,所以我想要一个解决方案,插件崩溃不会意味着主应用程序崩溃.
插件的方法经常被调用(例如,因为绘制了游戏对象).
到目前为止我发现了什么:
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(在C#中使用AppDomain),不同的AppDomain允许隔离.卸载插件很容易.性能负荷是多少?我需要经常调用插件的方法(例如绘制对象).
你能评论一下我的发现吗?新方法也受到欢迎!谢谢!
小智 10
您可以定义插件必须实现的公共接口.然后使用反射,您可以扫描实现该接口的任何类的"插件"文件夹,然后创建该类的实例.
从你的代码只需在界面上工作并调用所需的方法.关于崩溃,始终确保对"插件"接口的调用始终封装在try/catch块中.如果发生异常,您可以随时处置插件