2012-10-08 71 views
1

我們正在對應用程序進行重構,目前的想法是將代碼分解爲核心庫代碼+爲我們的開發人員定製的代碼。自定義代碼的自定義文件夾

我正在考慮可能有一個默認爲空的文件夾(即'custom'),當開發人員需要從現有的asp頁面或新頁面定製任何代碼時,他們只需要他們到文件夾,它會工作。例如:

可以說核心文件夾存儲默認的asp頁面。

core\customer\createCustomer.asp <-- the default page 

而當開發商要覆蓋頁,他需要的是ASP頁面複製到自定義文件夾,像

custom\customer\createCustomer.asp <-- modified asp page 

應用程序將自動加載一個自定義的文件夾,而在一個在覈心文件夾中。

這是可以在C#中嗎?

+0

Prestashop和Magento都共享此功能。我知道這是PHP,但它可能會讓你知道它是如何完成的。 –

回答

0

您可以使用VirtualPathProvider加載與「實際請求的文件」不同的文件。這也適用於IIS和緩存。

基本上你繼承VirtualPathProvider並覆蓋FileExistsGetFileDirectoryExistsGetDirectory方法(有一個在鏈接頁面的例子)。然後,在你AppInitialize,註冊

HostingEnvironment.RegisterVirtualPathProvider(sampleProvider); 

順便說提供商,不要忘了有不同的(不可編輯)頁,使用戶可以還原爲所做的任何更改,以便恢復可以這麼說。我可能會有一個簡單的版本控制系統,並在用戶進行更改時使用提交,並允許用戶恢復到以前的更改集。

+0

嗯,我有問題找到我應該在哪裏調用AppInitialize方法。我發現這個鏈接http://stackoverflow.com/questions/329936/when-appinitialize-method-get-invoked-in-asp-net,但不知道它有幫助.. – ipohfly

+0

你鏈接到的帖子描述的方法。它在應用程序啓動時被調用,並且只能在應用程序中定義一次。請閱讀[應用程序生命週期](http://msdn.microsoft.com/en-us/library/bb470252(VS.100).aspx),並在您的網站創建時調用RegisterVirtualPathProvider,例如在global.asax文件中的適當事件中。 – Patrick

0

This MSDN article解釋瞭如何使用IHttpModule實現攔截HTTP請求並執行自定義操作(它們指出日誌記錄,但由於您攔截了請求,因此您可能會獲取一些不同的內容,例如您的「自定義」代碼)。

+0

這看起來很有希望,但是通過「獲取代碼」,您的意思是將請求重定向到不同的內容? – ipohfly

+0

我可以想到兩種方法:將請求重定向到定製內容,或者不重定向,但是(在幕後)返回定製代碼並僞造響應以包含它而不是請求的響應(當然,網站將需要始終引用「核心」內容,而不是意識到它)。 – Alex