public TypedActivityTypeDescriber(IActivityPropertyOptionsResolver optionsResolver, IActivityPropertyUIHintResolver uiHintResolver, IActivityPropertyDefaultValueResolver defaultValueResolver, IServiceScopeFactory serviceScopeFactory) { _optionsResolver = optionsResolver; _uiHintResolver = uiHintResolver; _defaultValueResolver = defaultValueResolver; _serviceScopeFactory = serviceScopeFactory; }
public TypedActivityTypeDescriber(IActivityPropertyOptionsResolver optionsResolver, IActivityPropertyUIHintResolver uiHintResolver, IActivityPropertyDefaultValueResolver defaultValueResolver) { _optionsResolver = optionsResolver; _uiHintResolver = uiHintResolver; _defaultValueResolver = defaultValueResolver; }
private async ValueTask SetNestedActivityPropertiesAsync(object nestedInstance, ActivityExecutionContext activityExecutionContext, IDictionary <string, IActivityPropertyValueProvider> providers, IActivityPropertyDefaultValueResolver defaultValueResolver, string nestedInstanceName = null, CancellationToken cancellationToken = default) { var properties = nestedInstance.GetType().GetProperties().Where(IsActivityInputProperty).ToList(); var nestedProperties = nestedInstance.GetType().GetProperties().Where(IsActivityObjectInputProperty).ToList(); foreach (var property in properties) { var propertyName = nestedInstanceName == null ? property.Name : $"{nestedInstanceName}_{property.Name}"; if (!providers.TryGetValue(propertyName, out var provider)) { continue; } try { var value = await provider.GetValueAsync(activityExecutionContext, cancellationToken); if (value == null) { value = defaultValueResolver.GetDefaultValue(property); } if (value != null) { property.SetValue(nestedInstance, value); } } catch (Exception e) { throw new CannotSetActivityPropertyValueException($@"An exception was thrown whilst setting '{nestedInstance.GetType().Name}.{property.Name}'. See the inner exception for further details.", e); } } foreach (var nestedProperty in nestedProperties) { var instance = Activator.CreateInstance(nestedProperty.PropertyType); var nextInstanceName = nestedInstanceName == null ? nestedProperty.Name : $"{nestedInstanceName}_{nestedProperty.Name}"; await SetNestedActivityPropertiesAsync(instance, activityExecutionContext, providers, defaultValueResolver, nextInstanceName, cancellationToken); nestedProperty.SetValue(nestedInstance, instance); } }