是否可以在ASP.NET網站中加載外部「web部件」?我想使包含用戶控制或頁面的獨立dll包含在主站點中。就像網站的插件架構一樣。你可以在ASP.NET中有一個插件體系結構嗎?
我看起來可以找到的唯一示例將用戶控件綁定到主項目,您需要對控件有一個「硬」引用。
我想要的是定義一個插件可以實現的共享接口,並且網站可以加載和顯示。
是否可以在ASP.NET網站中加載外部「web部件」?我想使包含用戶控制或頁面的獨立dll包含在主站點中。就像網站的插件架構一樣。你可以在ASP.NET中有一個插件體系結構嗎?
我看起來可以找到的唯一示例將用戶控件綁定到主項目,您需要對控件有一個「硬」引用。
我想要的是定義一個插件可以實現的共享接口,並且網站可以加載和顯示。
有一個討論在這裏有關編譯UserControl
s轉換的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
這似乎是一個不錯的解決方案。您是否必須完全使用代碼構建WebControl,還是有可能使用模板引擎? – 2009-11-27 15:06:02
插件可以實現你的界面註冊您的插件在你的web.config。接口可以定義一種方法。此方法爲插件的上下文提供必要的常規輸入。插件的責任是返回可以放在最終輸出頁面上的html標記。通過這種方式,你可以擴大這個範圍,但是會危害頁面生命週期和回發功能,因爲頁面不知道插件返回的內容。
如果接口像Bob建議的那樣實現WebControl,我是否也會失去回發功能? – 2009-11-27 15:07:54
是的,您將失去回發功能。給你一個想法UserControls是由asp.net提供的內置插件機制。 UserControl派生自System.Web.UI.Page,使其具有回發功能。我建議您不要重新設計輪子,而應該嘗試通過製作自己的UserControl基類來使插件開發人員可以使用它來專門化UserControl。它可以是非常特殊的,它可能會公開與您的應用程序體系結構和核心業務邏輯耦合的方法和道具。 – 2009-11-28 12:05:56
我想你想有一個基礎設施,能夠加載分離模塊(控制反轉,或IOC)
閱讀更多關於WCSF 的Web客戶端軟件工廠 www.codeplex.com/websf
,如果你想了解與模塊化方法設計的Web應用程序很好的示例代碼,請下載Cuyahoga
凱霍加是一個開源.NET web 網站框架。它提供內容 管理功能,並具有 模塊化方法
畢竟讀了ASP.NET 3.5社交網絡 很不錯的書。
創建使用 ASP.NET 3.5 以實用,動手的方式學習重點新ASP.NET主題的完整功能,企業級社交網絡:LINQ,AJAX, 3·C。0,n層架構和MVC 建立朋友列表,消息系統,用戶配置文件,博客,留言 板基,更 豐富的示例代碼,清晰的解釋,有趣的例子, 和實用的建議 - 一個真正 動手預訂的ASP.NET開發人員
www.packtpub.com/expert-guide-for-social-networking-with-asp-.net-3.5/book
的作者向我們展示瞭如何將設計模式應用於現實世界的網絡應用納秒。 所有以黑體突出的模塊與IOC模式與使用StructureMap
這本書也有很不錯的示例代碼,您可以由Packt出版社網站上下載的開發。
你可以肯定有一個包含一堆用戶控件的DLL。而你的用戶控件當然可以實現你所選擇的界面。不過,你似乎想要的比這更多 - 但我不確定究竟是什麼。 – RickNZ 2009-11-27 15:05:57
用戶控件似乎無法像插件一樣被「按需」加載。您需要在主機網站中包含參考。我希望能夠加載任何實現我的界面的.dll,而無需更改主機網站。 – 2009-11-27 15:22:31