Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 编译语言中的附加组件_Asp.net_Add On - Fatal编程技术网

Asp.net 编译语言中的附加组件

Asp.net 编译语言中的附加组件,asp.net,add-on,Asp.net,Add On,我们正在ASP.NET中开发CMS。我们喜欢插件的想法(比如Wordpress,任何开发人员都可以添加一个菜单按钮或小部件),并希望开发人员能够对我们的系统做同样的事情 然而,我认为C#是一种编译语言这一事实阻碍了附加组件的发展 我说得对吗?或者有没有一种方法可以为ASP.NET应用程序创建附加组件?我不确定是否专门为ASP.NET创建附加组件,但在我所知道的唯一编译编程语言(Objective-C/Cocoa)中,有一个可以动态加载的包的概念。我不确定这在后端是如何工作的,但我想C#/ASP.

我们正在ASP.NET中开发CMS。我们喜欢插件的想法(比如Wordpress,任何开发人员都可以添加一个菜单按钮或小部件),并希望开发人员能够对我们的系统做同样的事情

然而,我认为C#是一种编译语言这一事实阻碍了附加组件的发展


我说得对吗?或者有没有一种方法可以为ASP.NET应用程序创建附加组件?

我不确定是否专门为ASP.NET创建附加组件,但在我所知道的唯一编译编程语言(Objective-C/Cocoa)中,有一个可以动态加载的包的概念。我不确定这在后端是如何工作的,但我想C#/ASP.NET也有类似的系统。

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

微软专门为这个问题创建了:为.NET应用程序提供.NET插件。它是VisualStudio(未来版本)用于编写托管插件的框架

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

C#是一种编译语言这一事实根本不是问题。事实上,.NETFramework应该使加载其他代码相对容易(与Java一样,出于同样的原因)。查看,它是关于在托管代码中加载加载项的。

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

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

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

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


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

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

这根本不是障碍。已经提到,您还可以使用: