private IActionRequest ConstructRequest(Type requestType, string actionName, IActionRequestPayload payload, List <ActionRequestDescriptor> continuations) { foreach (var constructor in requestType.GetConstructors()) { var parameters = constructor.GetParameters(); switch (parameters.Length) { case 2: if (parameters[0].ParameterType.IsAssignableFrom(payload.GetType()) && parameters[1].ParameterType.IsAssignableFrom(continuations.GetType())) { return(Activator.CreateInstance(requestType, payload, continuations) as IActionRequest); } break; case 3: if (parameters[0].ParameterType == typeof(string) && parameters[1].ParameterType.IsAssignableFrom(payload.GetType()) && parameters[2].ParameterType.IsAssignableFrom(continuations.GetType())) { return(Activator.CreateInstance(requestType, ActionName, payload, continuations) as IActionRequest); } break; } } return(base.ConstructRequest(requestType, payload)); }
protected IActionRequest ConstructRequest(Type requestType, IActionRequestPayload payload) { foreach (var constructor in requestType.GetConstructors()) { var parameters = constructor.GetParameters(); switch (parameters.Length) { case 1: if (parameters[0].ParameterType.IsAssignableFrom(payload.GetType())) { return(Activator.CreateInstance(requestType, payload) as IActionRequest); } break; case 2: if (parameters[0].ParameterType == typeof(string) && parameters[1].ParameterType.IsAssignableFrom(payload.GetType())) { return(Activator.CreateInstance(requestType, ActionName, payload) as IActionRequest); } break; } } throw new ActionProcessorException($"Could not find a suitable constructor for type: {requestType.Name}"); }