private async Task ExecuteMiddlewarePipeline(UnitOfWork unitOfWork, IServiceProvider uowScope, int middlewareIndex = 0) { if (middlewareIndex >= this.application.Middlewares.Count) { await this.Execute(unitOfWork, uowScope); } else { UOWApplication.MiddlewareCallback mw = this.application.Middlewares.ElementAt(middlewareIndex); await mw.Invoke(new UOWExecutionContext { Services = uowScope, UnitOfWork = unitOfWork }, async() => { await this.ExecuteMiddlewarePipeline(unitOfWork, uowScope, middlewareIndex + 1); }); } }
public UOWApplication Use(UOWApplication.MiddlewareCallback middleware) { this.Middlewares.Add(middleware); return(this); }