Fix lifetime scope issue with service bus queue starter

This commit is contained in:
Sipke Schoorstra 2020-11-24 10:44:33 +01:00
parent bc443fe317
commit 5e8a602f61
3 changed files with 11 additions and 8 deletions

View file

@ -1,7 +1,7 @@
using System;
using Elsa.Activities.AzureServiceBus.HostedServices;
using Elsa.Activities.AzureServiceBus.Options;
using Elsa.Activities.AzureServiceBus.Services;
using Elsa.Activities.AzureServiceBus.StartupTasks;
using Elsa.Activities.AzureServiceBus.Triggers;
using Microsoft.Azure.ServiceBus;
using Microsoft.Azure.ServiceBus.Management;

View file

@ -9,18 +9,16 @@ using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Elsa.Activities.AzureServiceBus.StartupTasks
namespace Elsa.Activities.AzureServiceBus.HostedServices
{
public class StartServiceBusQueues : BackgroundService
{
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowBlueprintReflector _workflowBlueprintReflector;
private readonly IMessageReceiverFactory _messageReceiverFactory;
private readonly IServiceProvider _serviceProvider;
public StartServiceBusQueues(IWorkflowRegistry workflowRegistry, IWorkflowBlueprintReflector workflowBlueprintReflector, IMessageReceiverFactory messageReceiverFactory, IServiceProvider serviceProvider)
public StartServiceBusQueues(IWorkflowBlueprintReflector workflowBlueprintReflector, IMessageReceiverFactory messageReceiverFactory, IServiceProvider serviceProvider)
{
_workflowRegistry = workflowRegistry;
_workflowBlueprintReflector = workflowBlueprintReflector;
_messageReceiverFactory = messageReceiverFactory;
_serviceProvider = serviceProvider;
@ -40,7 +38,9 @@ namespace Elsa.Activities.AzureServiceBus.StartupTasks
private async IAsyncEnumerable<string> GetQueueNamesAsync([EnumeratorCancellation] CancellationToken cancellationToken)
{
var workflows = await _workflowRegistry.GetWorkflowsAsync(cancellationToken).ToListAsync(cancellationToken);
using var scope = _serviceProvider.CreateScope();
var workflowRegistry = scope.ServiceProvider.GetRequiredService<IWorkflowRegistry>();
var workflows = await workflowRegistry.GetWorkflowsAsync(cancellationToken).ToListAsync(cancellationToken);
var query =
from workflow in workflows

View file

@ -10,10 +10,12 @@ namespace Elsa.Samples.AzureServiceBusWorker.Workflows
{
public class ProducerWorkflow : IWorkflow
{
private readonly IClock _clock;
private readonly Random _random;
public ProducerWorkflow()
public ProducerWorkflow(IClock clock)
{
_clock = clock;
_random = new Random();
}
@ -27,8 +29,9 @@ namespace Elsa.Samples.AzureServiceBusWorker.Workflows
private Greeting GetRandomGreeting()
{
var today = _clock.GetCurrentInstant().InUtc().Date.DayOfWeek;
var names = new[] { "John", "Jill", "Julia", "Miriam", "Jack", "Bob" };
var messages = new[] { "Hello!", "How do you do?", "Happy Monday!" };
var messages = new[] { "Hello!", "How do you do?", $"Happy {today}!" };
var from = _random.Next(0, names.Length);
var to = _random.Next(0, names.Length);
var message = _random.Next(0, messages.Length);