11using System . Reflection ;
2+ using LeanCode . Components ;
23using LeanCode . Contracts ;
34using MassTransit ;
45using MassTransit . Internals ;
@@ -8,18 +9,42 @@ namespace LeanCode.Pipe.Funnel.Publishing;
89
910public static class RegistrationConfiguratorExtensions
1011{
11- /// <summary>
12- /// Configures a consumer for each topic in the provided assemblies that will handle subscriptions
13- /// in the LeanPipe with Funnel model.
14- /// </summary>
15- /// <param name="configurator">MassTransit bus registration configurator.</param>
16- /// <param name="serviceName">Funnelled service name.</param>
12+ /// <inheritdoc cref="AddFunnelledLeanPipeConsumers(IRegistrationConfigurator,string,Type[],Type?)"/>
13+ /// <param name="leanPipeBuilder">Preconfigured LeanPipe services builder containing topics exposed by the service.</param>
14+ /// <remarks>This overload guarantees configuration of all consumers for each topics in the builder.</remarks>
15+ public static IRegistrationConfigurator AddFunnelledLeanPipeConsumers (
16+ this IRegistrationConfigurator configurator ,
17+ string serviceName ,
18+ LeanPipeServicesBuilder leanPipeBuilder ,
19+ Type ? funnelledSubscriberDefinitionOverride = null
20+ )
21+ {
22+ return configurator . AddFunnelledLeanPipeConsumers (
23+ serviceName ,
24+ leanPipeBuilder . Topics ,
25+ funnelledSubscriberDefinitionOverride
26+ ) ;
27+ }
28+
29+ /// <inheritdoc cref="AddFunnelledLeanPipeConsumers(IRegistrationConfigurator,string,Type[],Type?)"/>
30+ /// <param name="topics">Catalog of topics exposed by the service.</param>
31+ public static IRegistrationConfigurator AddFunnelledLeanPipeConsumers (
32+ this IRegistrationConfigurator configurator ,
33+ string serviceName ,
34+ TypesCatalog topics ,
35+ Type ? funnelledSubscriberDefinitionOverride = null
36+ )
37+ {
38+ return configurator . AddFunnelledLeanPipeConsumers (
39+ serviceName ,
40+ topics . Assemblies ,
41+ funnelledSubscriberDefinitionOverride
42+ ) ;
43+ }
44+
45+ /// <inheritdoc cref="AddFunnelledLeanPipeConsumers(IRegistrationConfigurator,string,Type[],Type?)"/>
1746 /// <param name="assembliesWithTopics">Assemblies that contain all topics exposed by the service.</param>
18- /// <param name="funnelledSubscriberDefinitionOverride">
19- /// Optional definition override for subscriber consumers.
20- /// Should inherit <see cref="FunnelledSubscriber{TTopic}"/> and be generic of the topics.
21- /// </param>
22- public static void AddFunnelledLeanPipeConsumers (
47+ public static IRegistrationConfigurator AddFunnelledLeanPipeConsumers (
2348 this IRegistrationConfigurator configurator ,
2449 string serviceName ,
2550 IEnumerable < Assembly > assembliesWithTopics ,
@@ -35,14 +60,25 @@ public static void AddFunnelledLeanPipeConsumers(
3560 . FindTypes ( TypeClassification . Closed | TypeClassification . Concrete )
3661 . ToArray ( ) ;
3762
38- configurator . AddFunnelledLeanPipeConsumers (
63+ return configurator . AddFunnelledLeanPipeConsumers (
3964 serviceName ,
4065 types ,
4166 funnelledSubscriberDefinitionOverride
4267 ) ;
4368 }
4469
45- public static void AddFunnelledLeanPipeConsumers (
70+ /// <summary>
71+ /// Configures a consumer for each topic in the provided assemblies that will handle subscriptions
72+ /// in the LeanPipe with Funnel model.
73+ /// </summary>
74+ /// <param name="configurator">MassTransit bus registration configurator.</param>
75+ /// <param name="serviceName">Funnelled service name.</param>
76+ /// <param name="topicTypes">All topics exposed by the service.</param>
77+ /// <param name="funnelledSubscriberDefinitionOverride">
78+ /// Optional definition override for subscriber consumers.
79+ /// Should inherit <see cref="FunnelledSubscriber{TTopic}"/> and be generic of the topics.
80+ /// </param>
81+ public static IRegistrationConfigurator AddFunnelledLeanPipeConsumers (
4682 this IRegistrationConfigurator configurator ,
4783 string serviceName ,
4884 Type [ ] topicTypes ,
@@ -80,6 +116,8 @@ public static void AddFunnelledLeanPipeConsumers(
80116 var consumerDefinitionType = subscriberDefinition . MakeGenericType ( topicType ) ;
81117 configurator . AddConsumer ( consumerType , consumerDefinitionType ) ;
82118 }
119+
120+ return configurator ;
83121 }
84122
85123 private static bool IsTopic ( Type type )
0 commit comments