你能在ASP.NET中拥有一个插件架构吗?

时间:2009-11-27 14:35:37

标签: asp.net architecture plugins

是否可以在ASP.NET网站中加载外部“web-parts”?我想制作包含用户控件或页面的独立dll以包含在主站点中。就像网站的插件架构一样。

我似乎找到的唯一示例将用户控件绑定到主项目,您需要对控件有一个“硬”引用。

我想要的是定义插件可以实现的共享接口,并且网站可以加载和显示。

3 个答案:

答案 0 :(得分:3)

这里有一个关于将UserControl编译成dll

的讨论

ASP.NET UserControl class library

对于你所描述的内容,我强烈推荐creating custom server controls。您可以为所有插件提供抽象基类。

public abstract class PluginBase : WebControl {

}

然后,您可以在目录中搜索程序集,并搜索每个程序集以查找从该类型派生的任何内容。

    DirectoryInfo di = new DirectoryInfo(path);
    FileInfo[] assemblies = di.GetFiles("*.dll");
    foreach (var assembly in assemblies) {
        Assembly a = Assembly.LoadFrom(assembly.FullName);
        foreach (Type type in a.GetTypes()) {
            if (type.BaseType == typeof(PluginBase)) {                     
                //load plugin
            }
        } 
    }

您还可以通过提供类似示例here

的配置部分在web.config中注册插件

答案 1 :(得分:1)

插件可以实现您的界面。接口可以定义一种方法。此方法为插件的上下文提供必要的常规输入。插件的职责是返回可以放在最终输出页面上的html标记。通过这种方式,您可以对此进行扩展,但会损害页面生命周期和回发功能,因为页面不知道插件返回的内容。

答案 2 :(得分:1)

我认为您希望拥有能够加载解耦模块的基础设施。(控制反转或IoC)

详细了解WCSF Web客户端软件工厂 的 www.codeplex.com/websf

如果您想要采用模块化方法的设计Web应用程序的示例代码,请下载Cuyahoga

  

Cuyahoga是一个开源的.NET网站   网站框架。它提供内容   管理能力和拥有   模块化方法

毕竟阅读了ASP.NET 3.5社交网络 非常好的书。

  

使用创建功能齐全的企业级社交网络   ASP.NET 3.5    以实用,实用的方式学习关键的新ASP.NET主题:LINQ,AJAX,   C#3.0,n层架构和MVC    构建好友列表,消息系统,用户个人资料,博客,消息   董事会,团体等    丰富的示例代码,清晰的解释,有趣的例子,   和实用的建议 - 一个真正的   ASP.NET开发人员的动手书

<强> www.packtpub.com/expert-guide-for-social-networking-with-asp-.net-3.5/book

作者向我们展示了如何将设计模式应用于现实世界的Web应用程序。 所有使用Bold Font突出显示的模块都是使用IoC Pattern开发的,使用 StructureMap

本书还有非常好的示例代码,您可以从Packt Publishing网站下载。