using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sers.SersLoader; using Sers.Core.Module.Api.ApiDesc; using Sers.Core.Module.Api.LocalApi; using Vit.Extensions; namespace Sers.Serslot { public class ApiLoader : SersLoader.ApiLoader { SerslotServer server; public ApiLoader(SerslotServer server) :base() { this.server = server; } protected override IEnumerable LoadControllers(ApiLoaderConfig config) { var types = ControllerHelp.Assembly_GetControllers(config.assembly); return types; } #region GetRoutePrefix MethodInfoGetReturnType /// /// demo: ["/Auth/fold1/fold2","/api","/"] /// /// /// /// protected override List GetRoutePrefixs(ApiLoaderConfig config, Type type) { return ControllerHelp.Controller_GetRoutePrefixs(type); } protected override Type MethodInfoGetReturnType(MethodInfo method) { return ControllerHelp.Action_GetReturnType(method); } #endregion #region LoadApiNodes /// /// /// /// demo: ["/Auth/fold1/fold2","/api"] /// /// protected override List LoadApiNodes(List routePrefixs, MethodInfo method, Func CreateApiDesc) { var routes = ControllerHelp.Action_GetRoutes(routePrefixs, method); // routes -> apiNode return routes.Select(routeInfo => { (string route, string httpMethod, string oriRoute) = routeInfo; var apiDesc = CreateApiDesc(); apiDesc.route = route; apiDesc.HttpMethodSet(httpMethod); apiDesc.OriRouteSet(oriRoute); apiDesc.SysDescAppend("oriRoute: " + oriRoute); IApiNode apiNode = new LocalApiNode(apiDesc, server); return apiNode; }).ToList(); } #endregion } }