我想有一个可以作为一个主机到许多其他的小应用程序的应用C#的主机应用程序。这些应用程序中的每一个都应该作为这个主应用程序的插件。我称它们为插件,并不是因为它们将某些东西添加到主应用程序中,而是因为它们只能使用此Host应用程序,因为它们依赖于它的某些服务。问题有关如何实现一个插件式的建筑风格
我的想法是让每一个不同的应用程序域中运行这些插件。问题似乎是,我的主机应用程序应该有一组服务,我的插件将要使用,并且我的理解是,从不同的应用程序域进出数据流并不是那么重要。一方面,我希望他们表现为独立应用程序(虽然,正如我所说的,他们需要使用主机应用程序服务的很多次),但另一方面,我希望如果他们中的任何一个崩溃,我的主要应用程序不会受到它的影响。
什么是最好的(.NET)的方法来这种情况?让它们都运行在相同的AppDomain上,但每个都在不同的线程中运行?使用不同的AppDomains?每个“插件”一个?我将如何让他们与主机应用程序通信?任何其他方式做到这一点?
虽然速度不是一个问题在这里,我不想对函数调用是远远低于他们,当我们只是一个普通的.NET应用程序的工作。
感谢
编辑:也许我真的需要使用不同的应用程序域。从我读到的内容来看,在不同AppDomain中加载程序集是以后能够从程序中卸载它们的唯一方法。
这是一个爱好应用程序,没什么特别的。我完全信任运行代码。问题是我需要我的每一个插件随时都在运行(也就是说,我不能让我的主机应用程序调用我的插件,它们必须是独立的,并为自己运行)。 – 2010-04-23 01:44:06
在这种情况下,我只是给每个他们自己的Thread运行并调用您定义的任何'Main'方法。如果您希望在插件引发异常时提供友好的回退,您可以选择在try/catch中将该线索调用为线程中的'Main'。 – 2010-04-23 02:14:46
是的,但请参阅上面的修改。这样,我不能以后卸载程序集加载,而无需重新启动应用程序。我必须让它们在不同的应用程序域中,以便我可以随时卸载它们。 – 2010-04-23 12:35:28