csharp / expert
Snippet
Middleware-Entwurfsmuster für modulare Anforderungsabläufe
Moderne Framework-Architekturen verwenden eine 'Chain of Responsibility', die über Delegaten implementiert wird. Dieses Snippet zeigt, wie man eine modulare Pipeline aufbaut, bei der jede Komponente eine Anfrage verarbeiten und entscheiden kann, ob der 'nächste' Delegat aufgerufen wird.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public delegate Task RequestDelegate(HttpContext context);public class MiddlewarePipeline {private readonly List<Func<RequestDelegate, RequestDelegate>> _components = new();public void Use(Func<RequestDelegate, RequestDelegate> middleware) => _components.Add(middleware);public RequestDelegate Build() {RequestDelegate app = context => Task.CompletedTask;for (int i = _components.Count - 1; i >= 0; i--) {app = _components[i](app);}return app;}}
Erklärung
1
delegate Task RequestDelegate
Definiert einen funktionalen Vertrag für die asynchrone Verarbeitung einer Operation.
2
app = _components[i](app)
Umschließt die bestehende Pipeline mit der neuen Middleware-Komponente und erzeugt eine geschachtelte Ausführung im Zwiebel-Stil.