private static T MethodResult <T>(this ISynologyRequest request, string name, params object[] parameters) where T : ResultData { var type = request.GetType(); var methods = type.GetMethods(); var filteredMethods = methods.Where(t => t.CustomAttributes.Any(a => a.AttributeType == typeof(RequestMethodAttribute))); var method = filteredMethods.FirstOrDefault(t => t.GetCustomAttributes(typeof(RequestMethodAttribute), true).Cast <RequestMethodAttribute>().FirstOrDefault()?.Name == name); var response = method?.Invoke(request, parameters); return(response as T); }
private static async Task <T> MethodResultAsync <T>(this ISynologyRequest request, string name, params object[] parameters) where T : ResultData { var type = request.GetType(); var methods = type.GetMethods(); var filteredMethods = methods.Where(t => t.CustomAttributes.Any(a => a.AttributeType == typeof(RequestMethodAttribute))); var method = filteredMethods.FirstOrDefault(t => (typeof(Task) == t.ReturnType || typeof(Task <>) == t.ReturnType.GetGenericTypeDefinition()) && t.GetCustomAttributes(typeof(RequestMethodAttribute), true).Cast <RequestMethodAttribute>().FirstOrDefault()?.Name == name); var response = await(Task <T>) method?.Invoke(request, parameters); return(response as T); }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="methodName"></param> protected SynologyParameters(ISynologyRequest request, [CallerMemberName] string methodName = null) { var method = request.GetType().GetMethod(methodName); if (method != null) { if (method.GetCustomAttribute(typeof(RequestMethodAttribute)) is RequestMethodAttribute attr) { Method = attr.Name; } else { throw new Exception("RequestMethodAttribute not found on caller method."); } } else { throw new Exception("Caller Method not found."); } Version = 1; }
public SynologyRequestParameters(ISynologyRequest request, [CallerMemberName] string methodName = null) : base(request, methodName) { }
internal static ResultData <T> Method <T>(this ISynologyRequest request, string name, params object[] parameters) => request.MethodResult <ResultData <T> >(name, parameters);
/// <summary> /// Posts the data async. /// </summary> /// <returns>The data async.</returns> /// <param name="request">Request.</param> /// <param name="parameters">Parameters.</param> internal static async Task <ResultData> PostDataAsync(this ISynologyRequest request, SynologyPostParameters parameters) => await request.Api.PostDataAsync(await request.CgiPathAsync(), request.ApiName, parameters);
internal static async Task <ResultData <T> > MethodAsync <T>(this ISynologyRequest request, string name, params object[] parameters) => await request.MethodResultAsync <ResultData <T> >(name, parameters);