0

We are developing a CMS in ASP.NET. We love the idea of add-ons (like in Wordpress, where any developer can add a menu button or a widget) and would like to enable developers to do the same with our system.

However I think that the fact that C# is a compiled language is an obstacle in the way of add-ons.

Am I right? Or is there a way to create add-ons for a ASP.NET application?

4

7 回答 7

3

C# 是一种编译语言这一事实​​根本不是问题。事实上,.NET 框架应该使加载其他代码相对容易(正如 Java 所做的那样,出于同样的原因)。查看Managed Extensibility Framework,它是关于在托管代码中加载附加组件的。

于 2009-01-19T11:32:39.143 回答
2

这根本不是障碍。MEF已经提到过,你也可以使用:

于 2009-01-19T11:43:07.750 回答
1

I'm not sure for ASP.NET specifically, but in the only compiled programming language I know (Objective-C/Cocoa), there's the concept of Bundles that can be loaded dynamically. I'm not sure how that works on the backend, but I'd guess that there is some similar system for C#/ASP.NET.

于 2009-01-19T11:16:25.417 回答
1

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

于 2009-01-19T11:28:03.163 回答
1

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

但是,考虑为此使用动态脚本语言!像这样的问题正是它们专门设计的。如果您在应用程序中托管动态语言运行时,这不仅意味着您的用户可以使用脚本语言扩展应用程序,甚至可以使用存在 DLR 实现的任何动态语言(脚本或其他):Ruby、Python、Smalltalk 、Scheme、JavaScript、PHP,应有尽有。最大的缺点:DLR 尚未发布。

于 2009-01-19T11:32:17.927 回答
1

在 C# 中,您可以创建任何程序集,将它们链接为 DLL 文件,然后做任何您想做的事情。

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

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

如果您想为插件提供可卸载性和安全性,您可以创建一个应用程序域并将插件加载到该域,这会增加复杂性,但也会增加稳定性(糟糕的插件不会使您的应用程序崩溃)。

如果您想要一个具体的答案,请更具体地询问:-)

于 2009-01-19T11:35:37.407 回答
1

把钩子放在适当的位置并不难。您必须提前定义附加功能将出现的位置。例如:绘制菜单时,您可以使用反射在其他 dll(具有特定名称和位置)中搜索“BuildMenu”功能。您将为此函数签名定义 API。它可能必须返回要添加到基本菜单项集合的项目列表。

于 2009-01-19T11:37:12.817 回答