public static async Task Handler(ControllerActionContext controllerActionContext) { var serv = controllerActionContext.UpdateContext.Services; var factory = serv.GetRequiredService <IControllersFactory>(); BotController controller = factory.Create(controllerActionContext); //Invoke initializer. await BotController.InvokeInitialize(controller, controllerActionContext); var methodInfo = controllerActionContext.ActionDescriptor.MethodInfo; //Model binding. var modelBindingContext = new ModelBindingContext(controllerActionContext); var mainModelBinder = serv .GetRequiredService <IMainModelBinderProvider>().MainModelBinder; await mainModelBinder.Bind(modelBindingContext); controllerActionContext.IsModelStateValid = modelBindingContext.IsAllBinded(); var invokationParams = modelBindingContext.ToMethodParameters(); //Invoke. var methodResult = methodInfo.Invoke(controller, invokationParams); if (methodResult is Task task) { await task; } //Invoke finished. await BotController.InvokeProcessed(controller); }
public async Task Bind(ModelBindingContext modelBinderContext) { foreach (var binder in _binders) { if (modelBinderContext.IsAllBinded()) { return; } await binder.Bind(modelBinderContext); } }