using Sers.Core.Module.Api.ApiDesc; using Sers.Core.Module.Api.LocalApi; using System; using System.Collections.Generic; using System.Reflection; using Sers.SersLoader; using Sers.Serslot; using ApiLoader = Sers.Serslot.ApiLoader; using LocalApiNode = Sers.Serslot.LocalApiNode; namespace Vit.Extensions { public static partial class LocalApiServiceExtensions { /// /// 调用Serslot加载器加载api /// /// /// /// public static void LoadSerslotApi(this LocalApiService data, Assembly assembly, SerslotServer server) { if (null == data) { return; } #region (x.1) api from host var config = new ApiLoaderConfig { assembly= assembly }; data.apiNodeMng.AddApiNode(new ApiLoader(server).LoadApi(config)); #endregion #region (x.2) api from appsettings.json::serslot.extApi Vit.Core.Util.ConfigurationManager.ConfigurationManager.Instance.GetByPath>("serslot.extApi")?.ForEach(apiDesc => { IApiNode apiNode; var reply = apiDesc.extendConfig?["reply"]; if (reply == null) { //(x.x.1)由host处理 apiNode = new LocalApiNode(apiDesc, server); } else { //(x.x.2)直接返回 指定的数据 var replyBytes = reply.SerializeToBytes(); #region onInvoke Func, byte[]> onInvoke = (ArraySegment arg_OriData) => { return replyBytes; }; #endregion apiNode = new ApiNode_Original(onInvoke, apiDesc); } data.apiNodeMng.AddApiNode(apiNode); }); #endregion } } }