diff --git a/src/core/Elsa.Core/ActivityTypeProviders/TypeBasedActivityProvider.cs b/src/core/Elsa.Core/ActivityTypeProviders/TypeBasedActivityProvider.cs index 28650e666..52ad1b335 100644 --- a/src/core/Elsa.Core/ActivityTypeProviders/TypeBasedActivityProvider.cs +++ b/src/core/Elsa.Core/ActivityTypeProviders/TypeBasedActivityProvider.cs @@ -15,23 +15,18 @@ namespace Elsa.ActivityTypeProviders { private readonly IActivityDescriber _activityDescriber; private readonly IActivityActivator _activityActivator; - private readonly Lazy> _lazyActivityTypeLookup; + private readonly IDictionary _activityTypeLookup; public TypeBasedActivityProvider(IServiceProvider serviceProvider, IActivityDescriber activityDescriber, IActivityActivator activityActivator) { _activityDescriber = activityDescriber; _activityActivator = activityActivator; - _lazyActivityTypeLookup = new Lazy>( - () => - { - using var scope = serviceProvider.CreateScope(); - var activities = scope.ServiceProvider.GetServices(); - return activities.Select(x => x.GetType()).Distinct().ToDictionary(x => x.Name); - }); + using var scope = serviceProvider.CreateScope(); + var activities = scope.ServiceProvider.GetServices(); + _activityTypeLookup = activities.Select(x => x.GetType()).Distinct().ToDictionary(x => x.Name); } - - private IDictionary ActivityTypeLookup => _lazyActivityTypeLookup.Value; + public ValueTask> GetActivityTypesAsync(CancellationToken cancellationToken) => new(GetActivityTypesInternal()); private IEnumerable GetActivityTypesInternal() => GetActivityTypes().Select(CreateActivityType); @@ -62,7 +57,7 @@ namespace Elsa.ActivityTypeProviders }; } - private IEnumerable GetActivityTypes() => ActivityTypeLookup.Values.ToList(); + private IEnumerable GetActivityTypes() => _activityTypeLookup.Values.ToList(); private Task ActivateActivity(ActivityExecutionContext context, Type type) => _activityActivator.ActivateActivityAsync(context, type); }