From 2a2de8a95f894b5c80cb6a8b35c496c74d3133c9 Mon Sep 17 00:00:00 2001 From: Joel Oliveira Date: Wed, 14 Oct 2020 15:25:39 +0100 Subject: [PATCH] feat: allow middlewares to be registered at the beginning --- ...IConsumerMiddlewareConfigurationBuilder.cs | 19 ++++++++++++++++++ .../ConsumerMiddlewareConfigurationBuilder.cs | 20 ++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/KafkaFlow.Abstractions/Configuration/IConsumerMiddlewareConfigurationBuilder.cs b/src/KafkaFlow.Abstractions/Configuration/IConsumerMiddlewareConfigurationBuilder.cs index 47f499e70..676d04f84 100644 --- a/src/KafkaFlow.Abstractions/Configuration/IConsumerMiddlewareConfigurationBuilder.cs +++ b/src/KafkaFlow.Abstractions/Configuration/IConsumerMiddlewareConfigurationBuilder.cs @@ -19,6 +19,16 @@ public interface IConsumerMiddlewareConfigurationBuilder IConsumerMiddlewareConfigurationBuilder Add(Factory factory) where T : class, IMessageMiddleware; + /// + /// Registers a middleware at the beginning of the middleware list + /// The middleware will run before other middlewares that already have been registered + /// + /// A factory to create the instance + /// A class that implements the + /// + IConsumerMiddlewareConfigurationBuilder AddAtBeginning(Factory factory) + where T : class, IMessageMiddleware; + /// /// Registers a middleware /// @@ -26,5 +36,14 @@ IConsumerMiddlewareConfigurationBuilder Add(Factory factory) /// IConsumerMiddlewareConfigurationBuilder Add() where T : class, IMessageMiddleware; + + /// + /// Registers a middleware at the beginning of the middleware list + /// The middleware will run before other middlewares that already have been registered + /// + /// A class that implements the + /// + IConsumerMiddlewareConfigurationBuilder AddAtBeginning() + where T : class, IMessageMiddleware; } } diff --git a/src/KafkaFlow/Configuration/ConsumerMiddlewareConfigurationBuilder.cs b/src/KafkaFlow/Configuration/ConsumerMiddlewareConfigurationBuilder.cs index 9dbfaef7c..1629e1b9a 100644 --- a/src/KafkaFlow/Configuration/ConsumerMiddlewareConfigurationBuilder.cs +++ b/src/KafkaFlow/Configuration/ConsumerMiddlewareConfigurationBuilder.cs @@ -21,13 +21,31 @@ public IConsumerMiddlewareConfigurationBuilder Add(Factory factory) where return this; } + public IConsumerMiddlewareConfigurationBuilder AddAtBeginning(Factory factory) where T : class, IMessageMiddleware + { + this.middlewaresFactories.Insert(0, factory); + return this; + } + public IConsumerMiddlewareConfigurationBuilder Add() where T : class, IMessageMiddleware { - this.DependencyConfigurator.AddTransient(); + this.RegisterType(); this.middlewaresFactories.Add(resolver => resolver.Resolve()); return this; } + public IConsumerMiddlewareConfigurationBuilder AddAtBeginning() where T : class, IMessageMiddleware + { + this.RegisterType(); + this.middlewaresFactories.Insert(0, resolver => resolver.Resolve()); + return this; + } + public MiddlewareConfiguration Build() => new MiddlewareConfiguration(this.middlewaresFactories); + + private void RegisterType() where T : class, IMessageMiddleware + { + this.DependencyConfigurator.AddTransient(); + } } }