示例#1
0
        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));
        }
示例#2
0
        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}");
        }