.Net和插件架构

时间:2009-08-01 18:16:48

标签: .net architecture plugins

继Jeff和Joel关于插件架构的讨论之后。

C ++中的插件(使用运行时加载的dll)总是有点痛苦。你必须做很多基础工作来启用它们,然后插件也必须用C ++编写,通常使用相同的编译器。 COM对象和ActiveX解决了其中的一些问题,但引入了一些自己的问题 然后添加说,一个python接口,到C ++应用程序是一项大量的工作。

我是否认为用一种.Net语言编写的所有库(或程序集或其他任何名称)都可以从另一种.Net语言中调用?并且对象可以在它们之间自动传输数据类型吗?

据推测,因为所有.Net语言也使用Winforms(或WPF)作为gui,然后让插件访问主应用程序的gui也相对简单。

很抱歉,如果这是一个相当明显的观点,我只是一个老式的C ++程序员。但是通过C ++ / CLI重用现有C ++库的难易程度使我确信C#/ .Net可能值得更多调查。

编辑 - 谢谢,我想讨论插件是否是去.Net的理由。能够编写ironpython,同时让我的业务用户能够在VB中编写一个简单的插件,技术用户能够在F#中创建一些聪明的东西而不需要我做更多的工作似乎是从C ++切换的一个很好的理由

4 个答案:

答案 0 :(得分:3)

  

我是否认为用一种.Net语言编写的所有库(或程序集或其他任何名称)都可以从另一种.Net语言中调用?并且对象可以在它们之间自动传输数据类型吗?

是。在.NET中,由于CTS(提供一组用于所有.NET兼容语言的通用数据类型并确保类型兼容性)和CLS(定义所有.NET语言编译器的一组最低标准),因此可以实现跨语言兼容性。必须符合,从而确保语言互操作性)。在编译期间,任何符合.NET的语言的源代码都由相应的语言编译器转换为中间语言代码。由于所有.NET程序集(EXE或DLL)都作为中间语言存在,因此它们可以在它们之间进行互操作。所有.NET兼容语言都使用相同的数据类型,仅表示为.NET类型。因此,无论您是在C#中使用int还是在Visual Basic .NET中使用Integer,在IL中它都表示为System.Int32。 [Source]

答案 1 :(得分:1)

如果您正在寻找.NET中的插件库,我会注意到以下几个选项:

两者都是开源的,因此您可以看到他们如何创建插件环境。

答案 2 :(得分:0)

.Net下插件的主要问题不是能够从插件的DLL调用代码(并与之互操作),而是安全问题。那些也可以解决,你可以在这里看一下(链接的那些样本也应该提供一个非常简单的主机+插件)How to create a Plugin Model in .NET with Sandbox?

对于.Net语言之间的互操作性 - 这没有问题。
共享gui - 我已经使用Winforms完成了这个,虽然我不知道在WPF下它是否也会那么容易,但我并不是很难,但我从未尝试过它。

答案 3 :(得分:0)

是的,你可以通过Reflection

实现所有目标

有关于c#插件结构的文章,例如this one

相关问题