這是個什麼鬼,第一次見到的時候,我也不知道就花幾天時間看了下它的代碼 在網上搜索WebApiTestHelpPage會出來很多相關頁面 但是它們都是介紹怎麼用的,要麼就是怎麼添加註釋 它是怎麼實現的,是什麼思想,為什麼這樣做,又是怎麼切入原來的系統並沒有講到 如果你只是想知道怎麼讓WebApiTes ...
這是個什麼鬼,第一次見到的時候,我也不知道就花幾天時間看了下它的代碼
在網上搜索WebApiTestHelpPage會出來很多相關頁面
但是它們都是介紹怎麼用的,要麼就是怎麼添加註釋
它是怎麼實現的,是什麼思想,為什麼這樣做,又是怎麼切入原來的系統並沒有講到
如果你只是想知道怎麼讓WebApiTestHelpPage出現在你的項目中
你可以參考:http://www.cnblogs.com/landeanfen/p/5210356.html
如果想處理多個項目之間的註釋問題
你可以參考:http://blog.csdn.net/aiwuzhi12/article/details/60465983
添加完項目之後:
生成文檔的相關代碼就在:helpPage這個Areas下具體如下圖
這個自動生成文檔的插件是怎麼實現的呢,是什麼樣的思想呢
正常情況下如果讓我們去做,我們會怎麼思考。
Web Api幫助頁面顯示的都是API介面的描述
那肯定要可以拿到WepApi的原數據才可以
就大概看了一下自動生成的代碼
根據以前經驗,如果要擴展一個系統,或者要學習一個框架
要看系統的配置,環境,
第一眼看到的就是HelpPageConfig 打開文件又只有一個方法
public static void Register(HttpConfiguration config)
類和方法都是靜態的
一般靜態的類方法用作對另一個系統的擴展,通過this關鍵字,委托註入到另一個系統
的核心對象
通過引用找到是誰調用了它,發現在 類
HelpPageAreaRegistration 的RegisterArea方法內調用了
HelpPageConfig.Register(GlobalConfiguration.Configuration);
那麼HelpPageAreaRegistration有什麼用呢,它實現了AreaRegistration 域註冊這個對象
並且重寫了它的抽象方法RegisterArea 這意味著只要繼承了AreaRegistration這個對象
被重寫的方法,在需要的時候都會調用到
那麼HelpPageAreaRegistration這個域註冊器是怎麼被調用到的呢
通過查找 發現AreaRegistration裡面有靜態的方法
// // 摘要: // 註冊 ASP.NET MVC 應用程式中的所有區域。 public static void RegisterAllAreas(); // // 摘要: // 使用指定的用戶定義信息在 ASP.NET MVC 應用程式內註冊所有區域。 // // 參數: // state: // 一個包含要傳遞到區域中的用戶定義信息的對象。 public static void RegisterAllAreas(object state);
也許有可能是程式啟動的時候,通過調用RegisterAllAreas這個方法,把其他的Area都註入到系統裡面來於是在
Global.asax這個文件裡面找到了
AreaRegistration.RegisterAllAreas();這行代碼
到此helpPage是被系統運行到的已經找到
再回顧一下,通過繼承AreaRegistration被系統找到,調用註冊RegisterArea的方法
然後在RegisterArea方法內部再初始化路由,初始helpPage的系統配置
HelpPageConfig這個內部到底是乾什麼的呢
方法內部調用了很多的擴展方法,這些擴展方法都被掛到了ASP.net的核心配置對象
HttpConfiguration 上
這個裡面可以拿到系統的很多信息比如HttpConfiguration. Services可以拿到所有系統預設的服務實例
// // 摘要: // 獲取與此實例關聯的預設服務的容器。 // // 返回結果: // System.Web.Http.Controllers.ServicesContainer,包含此實例的預設服務。 public ServicesContainer Services { get; }
通過調用ServicesContainer擴展方法
/ / // 摘要: // 獲取 System.Web.Http.Description.IApiExplorer 服務。 // // 參數: // services: // 服務容器。 // // 返回結果: // 返回 System.Web.Http.Description.IApiExplorer 實例。 public static IApiExplorer GetApiExplorer(this ServicesContainer services);
拿到當前系統的所有的API介面
這樣就可以在頁面上顯示出來
然後再通過用戶的點擊去查找具體的API介面信息
就在界面上看到瞭如下的結果