• WebApiTestHelpPage


    这是个什么鬼,第一次见到的时候,我也不知道就花几天时间看了下它的代码

    在网上搜索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接口信息

    就在界面上看到了如下的结果

     

  • 相关阅读:
    java基础学习总结——面向对象1
    java基础学习总结——基础语法2
    java基础学习总结——基础语法1
    java基础学习总结——开篇
    java基础学习总结——java环境变量配置
    Java基础加强总结(二)——泛型
    Java基础加强总结(一)——注解(Annotation)
    Web开发中设置快捷键来增强用户体验
    SQLServer2005中的CTE递归查询得到一棵树
    Jquery操作table
  • 原文地址:https://www.cnblogs.com/gdnyfcuso/p/8308357.html
Copyright © 2020-2023  润新知