Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 5dbe2c6

Browse files
authored
SubscriptionProcessor is now set up to use ScopedMessageHandler (#473)
* SubscriptionProcessor is now set up to use ScopedMessageHandler by default, so that individual jobs don't have to do same setup over and over. * Added specific check for the case when `ISubscriptionProcessor<T>` is not configured in the DI, suggesting to use the default setup from `SubcriptionProcessorJob<T>`. Update jobs code to include a call to that helper method.
1 parent b0a380b commit 5dbe2c6

4 files changed

Lines changed: 35 additions & 27 deletions

File tree

src/Validation.Common.Job/JsonConfigurationJob.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,16 @@ private void ConfigureLibraries(IServiceCollection services)
184184
services.AddLogging();
185185
}
186186

187+
/// <summary>
188+
/// Method to be implemented in derived classes to provide Autofac-specific configuration for
189+
/// that specific job (like setting up keyed resolution).
190+
/// </summary>
187191
protected abstract void ConfigureAutofacServices(ContainerBuilder containerBuilder);
192+
193+
/// <summary>
194+
/// Method to be implemented in derived classes to provide DI container configuration
195+
/// specific for the job.
196+
/// </summary>
188197
protected abstract void ConfigureJobServices(IServiceCollection services, IConfigurationRoot configurationRoot);
189198
}
190199
}

src/Validation.Common.Job/SubcriptionProcessorJob.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Threading.Tasks;
6+
using Autofac;
67
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Logging;
89
using NuGet.Services.ServiceBus;
@@ -19,7 +20,13 @@ public abstract class SubcriptionProcessorJob<T> : JsonConfigurationJob
1920

2021
public override async Task Run()
2122
{
22-
var processor = _serviceProvider.GetRequiredService<ISubscriptionProcessor<T>>();
23+
var processor = _serviceProvider.GetService<ISubscriptionProcessor<T>>();
24+
25+
if (processor == null)
26+
{
27+
throw new Exception($"DI container was not set up to produce instances of ISubscriptionProcessor<{typeof(T).Name}>. " +
28+
$"Call SubcriptionProcessorJob<T>.ConfigureDefaultSubscriptionProcessor() or set it up your way.");
29+
}
2330

2431
processor.Start();
2532

@@ -33,5 +40,21 @@ public override async Task Run()
3340
processor.NumberOfMessagesInProgress);
3441
}
3542
}
43+
44+
protected static void ConfigureDefaultSubscriptionProcessor(ContainerBuilder containerBuilder)
45+
{
46+
const string bindingKey = "SubscriptionProcessorJob_SubscriptionProcessorKey";
47+
48+
containerBuilder
49+
.RegisterType<ScopedMessageHandler<T>>()
50+
.Keyed<IMessageHandler<T>>(bindingKey);
51+
52+
containerBuilder
53+
.RegisterType<SubscriptionProcessor<T>>()
54+
.WithParameter(
55+
(parameter, context) => parameter.ParameterType == typeof(IMessageHandler<T>),
56+
(parameter, context) => context.ResolveKeyed(bindingKey, typeof(IMessageHandler<T>)))
57+
.As<ISubscriptionProcessor<T>>();
58+
}
3659
}
3760
}

src/Validation.PackageSigning.ProcessSignature/Job.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,26 +68,14 @@ protected override void ConfigureJobServices(IServiceCollection services, IConfi
6868

6969
protected override void ConfigureAutofacServices(ContainerBuilder containerBuilder)
7070
{
71-
const string validateSignatureBindingKey = "ValidateSignatureKey";
72-
var signatureValidationMessageHandlerType = typeof(IMessageHandler<SignatureValidationMessage>);
71+
ConfigureDefaultSubscriptionProcessor(containerBuilder);
7372

7473
containerBuilder
7574
.RegisterType<ValidatorStateService>()
7675
.WithParameter(
7776
(pi, ctx) => pi.ParameterType == typeof(string),
7877
(pi, ctx) => ValidatorName.PackageSignatureProcessor)
7978
.As<IValidatorStateService>();
80-
81-
containerBuilder
82-
.RegisterType<ScopedMessageHandler<SignatureValidationMessage>>()
83-
.Keyed<IMessageHandler<SignatureValidationMessage>>(validateSignatureBindingKey);
84-
85-
containerBuilder
86-
.RegisterType<SubscriptionProcessor<SignatureValidationMessage>>()
87-
.WithParameter(
88-
(parameter, context) => parameter.ParameterType == signatureValidationMessageHandlerType,
89-
(parameter, context) => context.ResolveKeyed(validateSignatureBindingKey, signatureValidationMessageHandlerType))
90-
.As<ISubscriptionProcessor<SignatureValidationMessage>>();
9179
}
9280
}
9381
}

src/Validation.PackageSigning.ValidateCertificate/Job.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,7 @@ protected override void ConfigureJobServices(IServiceCollection services, IConfi
4747

4848
protected override void ConfigureAutofacServices(ContainerBuilder containerBuilder)
4949
{
50-
const string validateCertificateBindingKey = "ValidateCertificateKey";
51-
var certificateValidationMessageHandlerType = typeof(IMessageHandler<CertificateValidationMessage>);
52-
53-
containerBuilder
54-
.RegisterType<ScopedMessageHandler<CertificateValidationMessage>>()
55-
.Keyed<IMessageHandler<CertificateValidationMessage>>(validateCertificateBindingKey);
56-
57-
containerBuilder
58-
.RegisterType<SubscriptionProcessor<CertificateValidationMessage>>()
59-
.WithParameter(
60-
(parameter, context) => parameter.ParameterType == certificateValidationMessageHandlerType,
61-
(parameter, context) => context.ResolveKeyed(validateCertificateBindingKey, certificateValidationMessageHandlerType))
62-
.As<ISubscriptionProcessor<CertificateValidationMessage>>();
50+
ConfigureDefaultSubscriptionProcessor(containerBuilder);
6351
}
6452
}
6553
}

0 commit comments

Comments
 (0)