我們正在ASP.NET中開發CMS。我們喜歡插件的想法(比如在Wordpress中,任何開發人員都可以添加菜單按鈕或小部件),並希望開發人員能夠對我們的系統執行相同的操作。以編譯語言編寫的插件
但是我認爲C#是一種編譯語言的事實是插件方式的一個障礙。
我對不對?或者有沒有辦法爲ASP.NET應用程序創建附加組件?
我們正在ASP.NET中開發CMS。我們喜歡插件的想法(比如在Wordpress中,任何開發人員都可以添加菜單按鈕或小部件),並希望開發人員能夠對我們的系統執行相同的操作。以編譯語言編寫的插件
但是我認爲C#是一種編譯語言的事實是插件方式的一個障礙。
我對不對?或者有沒有辦法爲ASP.NET應用程序創建附加組件?
我不確定是否使用了ASP.NET,但是我知道唯一編譯的編程語言(Objective-C/Cocoa),可以動態加載Bund的概念。我不確定後端是如何工作的,但我猜測C#/ ASP.NET有一些類似的系統。
我不知道它是如何在Wordpress中完成的,但應該有很多方法。您可以允許開發人員使用編譯後的代碼上傳程序集,也可以允許他們上傳C#或IronPython中的代碼或任何支持並動態編譯它的代碼。也許你可以使用WebParts來完成你的任務。
Microsoft已創建Managed Extensibility Framework (MEF),專門針對此問題:爲.NET應用程序提供.NET插件。 Visual Studio用於編寫託管插件的框架(未來版本)。
但是,請考慮使用動態腳本語言!像這樣的問題是正是他們是專門設計的。如果您將Dynamic Language Runtime託管在您的應用程序中,這不僅意味着您的用戶可以將應用程序擴展爲腳本語言,但是甚至可以使用任何存在DLR實現的動態語言(腳本或其他):Ruby,Python ,Smalltalk,Scheme,JavaScript,PHP,你的名字。最大的劣勢:DLR尚未發佈。
C#是一種編譯語言的事實根本不是問題。事實上,.NET框架應該能夠相對容易地加載其他代碼(就像Java一樣,出於同樣的原因)。查看Managed Extensibility Framework,這是關於在託管代碼中加載插件的全部內容。
在C#中,您可以創建任何程序集,將它們鏈接爲DLL文件,然後執行任何您想要的操作。
通常的情況是定義一些必須由所有插件實現的插件接口。
然後,您可以從文件系統加載所有插件(通過迭代插件DLL),找到實現接口的類,實例化它並使用它。
如果您想要提供具有可卸載性和安全性的插件,您可以創建一個應用程序域並加載插件,從而增加複雜性,但也會增加穩定性(一個糟糕的插件不會導致應用程序崩潰)。
如果你想要一個明確的答案:-)
這不是太難用鉤子鉤住的地方請詢問更具體。您必須提前定義附加功能的顯示位置。例如:在繪製菜單時,您可以使用反射來搜索其他dll(具有特定的名稱和位置)以實現「BuildMenu」功能。您將爲此函數簽名定義API。它可能必須返回要添加到基本菜單項集合中的項目列表。
這不是一個障礙。 MEF已經提到,你也可以使用: