2009-01-19 100 views
0

我们正在ASP.NET中开发CMS。我们喜欢插件的想法(比如在Wordpress中,任何开发人员都可以添加菜单按钮或小部件),并希望开发人员能够对我们的系统执行相同的操作。以编译语言编写的插件

但是我认为C#是一种编译语言的事实是插件方式的一个障碍。

我对不对?或者有没有办法为ASP.NET应用程序创建附加组件?

回答

1

我不确定是否使用了ASP.NET,但是我知道唯一编译的编程语言(Objective-C/Cocoa),可以动态加载Bund的概念。我不确定后端是如何工作的,但我猜测C#/ ASP.NET有一些类似的系统。

1

我不知道它是如何在Wordpress中完成的,但应该有很多方法。您可以允许开发人员使用编译后的代码上传程序集,也可以允许他们上传C#或IronPython中的代码或任何支持并动态编译它的代码。也许你可以使用WebParts来完成你的任务。

1

Microsoft已创建Managed Extensibility Framework (MEF),专门针对此问题:为.NET应用程序提供.NET插件。 Visual Studio用于编写托管插件的框架(未来版本)。

但是,考虑使用动态脚本语言!像这样的问题是正是他们是专门设计的。如果您将Dynamic Language Runtime托管在您的应用程序中,这不仅意味着您的用户可以将应用程序扩展为脚本语言,但是甚至可以使用任何存在DLR实现的动态语言(脚本或其他):Ruby,Python ,Smalltalk,Scheme,JavaScript,PHP,你的名字。最大的劣势:DLR尚​​未发布。

3

C#是一种编译语言的事实根本不是问题。事实上,.NET框架应该能够相对容易地加载其他代码(就像Java一样,出于同样的原因)。查看Managed Extensibility Framework,这是关于在托管代码中加载插件的全部内容。

1

在C#中,您可以创建任何程序集,将它们链接为DLL文件,然后执行任何您想要的操作。

通常的情况是定义一些必须由所有插件实现的插件接口。

然后,您可以从文件系统加载所有插件(通过迭代插件DLL),找到实现接口的类,实例化它并使用它。

如果您想要提供具有可卸载性和安全性的插件,您可以创建一个应用程序域并加载插件,从而增加复杂性,但也会增加稳定性(一个糟糕的插件不会导致应用程序崩溃)。

如果你想要一个明确的答案:-)

1

这不是太难用钩子钩住的地方请询问更具体。您必须提前定义附加功能的显示位置。例如:在绘制菜单时,您可以使用反射来搜索其他dll(具有特定的名称和位置)以实现“BuildMenu”功能。您将为此函数签名定义API。它可能必须返回要添加到基本菜单项集合中的项目列表。