Update ReceiveHttpRequest using new trigger API

This commit is contained in:
Sipke Schoorstra 2020-10-17 13:51:27 +02:00
parent f4cad1c5c8
commit 72caccb6a6
37 changed files with 73 additions and 226 deletions

View file

@ -13,10 +13,6 @@ namespace Elsa.Activities.Http
this IBuilder builder,
Action<ISetupActivity<ReceiveHttpRequest>> setup) => builder.Then(setup);
public static IActivityBuilder ReceiveHttpRequest(
this IBuilder builder,
Action<ReceiveHttpRequest> setup) => builder.Then(setup);
public static IActivityBuilder ReceiveHttpRequest(this IBuilder builder,
Func<ActivityExecutionContext, ValueTask<PathString>> path) =>
builder.ReceiveHttpRequest(setup => setup.Set(x => x.Path, path));
@ -32,6 +28,6 @@ namespace Elsa.Activities.Http
builder.ReceiveHttpRequest(setup => setup.Set(x => x.Path, path));
public static IActivityBuilder ReceiveHttpRequest(this IBuilder builder, PathString path) =>
builder.ReceiveHttpRequest(x => x.Path = path);
builder.ReceiveHttpRequest(setup => setup.Set(x => x.Path, path));
}
}

View file

@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Builder
public static IApplicationBuilder UseHttpActivities(this IApplicationBuilder app)
{
return app
.UseRequestHandler<TriggerRequestHandler>()
.UseMiddleware<ReceiveHttpRequestMiddleware>()
.UseRequestHandler<SignalRequestHandler>("/workflows/signal");
}

View file

@ -48,7 +48,6 @@ namespace Microsoft.Extensions.DependencyInjection
.AddDataProtection();
return services
.AddRequestHandler<TriggerRequestHandler>()
.AddRequestHandler<SignalRequestHandler>();
}

View file

@ -1,7 +1,6 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Http.Services;
using Elsa.Activities.Http.Triggers;
using Elsa.Services;
using Elsa.Triggers;
@ -18,10 +17,11 @@ namespace Elsa.Activities.Http.Middleware
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext, IWorkflowSelector workflowSelector, IWorkflowHost workflowHost, CancellationToken cancellationToken)
public async Task InvokeAsync(HttpContext httpContext, IWorkflowSelector workflowSelector, IWorkflowHost workflowHost)
{
var path = httpContext.Request.Path;
var method = httpContext.Request.Method;
var cancellationToken = httpContext.RequestAborted;
var results = await workflowSelector.SelectWorkflowsAsync<ReceiveHttpRequestTrigger>(
x => x.Path == path && x.Method == null || x.Method == method,

View file

@ -1,100 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Http.Indexes;
using Elsa.Activities.Http.RequestHandlers.Results;
using Elsa.Activities.Http.Services;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Services;
using Elsa.Services.Models;
using Microsoft.AspNetCore.Http;
using Open.Linq.AsyncExtensions;
namespace Elsa.Activities.Http.RequestHandlers.Handlers
{
public class TriggerRequestHandler : IRequestHandler
{
private readonly HttpContext _httpContext;
private readonly IWorkflowHost _workflowHost;
private readonly IWorkflowRegistry _registry;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly CancellationToken _cancellationToken;
public TriggerRequestHandler(
IHttpContextAccessor httpContext,
IWorkflowHost workflowHost,
IWorkflowRegistry registry,
IWorkflowInstanceManager workflowInstanceManager)
{
_httpContext = httpContext.HttpContext;
_workflowHost = workflowHost;
_registry = registry;
_workflowInstanceManager = workflowInstanceManager;
_cancellationToken = httpContext.HttpContext.RequestAborted;
}
public async Task<IRequestHandlerResult> HandleRequestAsync()
{
// TODO: Optimize this by building up a hash of routes and workflows to execute.
var requestPath = _httpContext.Request.Path.ToString();
var method = _httpContext.Request.Method;
var httpWorkflows =
await _registry.GetWorkflowsByStartActivityAsync<ReceiveHttpRequest>(_cancellationToken);
var workflowsToStart = httpWorkflows;
var workflowsToResume =
await _workflowInstanceManager
.Query<WorkflowInstanceByReceiveHttpRequestIndex>(
x => x.RequestPath == requestPath && x.RequestMethod == null || x.RequestMethod == method)
.ListAsync()
.ToList();
if (!workflowsToStart.Any() && !workflowsToResume.Any())
return new NextResult();
var workflowsToResumeTuples =
from workflowInstance in workflowsToResume
from blockingActivity in workflowInstance.BlockingActivities
where blockingActivity.ActivityType == nameof(ReceiveHttpRequest)
from activity in workflowInstance.Activities
where activity.Id == blockingActivity.ActivityId
where activity.Data.Value<string>(nameof(ReceiveHttpRequest.Path)) == requestPath
where activity.Data.Value<string>(nameof(ReceiveHttpRequest.Method)) == method
select (workflowInstance, activity);
await InvokeWorkflowsToStartAsync(workflowsToStart);
await InvokeWorkflowsToResumeAsync(workflowsToResumeTuples);
return !_httpContext.Items.ContainsKey(WorkflowHttpResult.Instance)
? (IRequestHandlerResult)new AcceptedResult()
: new EmptyResult();
}
private async Task InvokeWorkflowsToStartAsync(
IEnumerable<(IWorkflowBlueprint Workflow, IActivityBlueprint Activity)> items)
{
foreach (var (workflow, activity) in items)
{
await _workflowHost.RunWorkflowAsync(
workflow,
activity.Id,
cancellationToken: _cancellationToken);
}
}
private async Task InvokeWorkflowsToResumeAsync(IEnumerable<(WorkflowInstance, ActivityInstance)> items)
{
foreach (var (workflowInstance, activity) in items)
{
await _workflowHost.RunWorkflowAsync(
workflowInstance,
activity.Id,
cancellationToken: _cancellationToken);
}
}
}
}

View file

@ -2,10 +2,8 @@
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.Xml;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Expressions;
using Elsa.Services;
using Elsa.Services.Models;
using Elsa.Triggers;
@ -50,8 +48,8 @@ namespace Elsa.Activities.Http.Triggers
yield return new ReceiveHttpRequestTrigger
{
ActivityId = activity.Id,
Path = (PathString)(await workflowBlueprint.ActivityPropertyProviders.GetProvider(activity.Id, nameof(ReceiveHttpRequest.Path))!.GetValueAsync(activityExecutionContext, cancellationToken))!,
Method = (string)(await workflowBlueprint.ActivityPropertyProviders.GetProvider(activity.Id, nameof(ReceiveHttpRequest.Method))!.GetValueAsync(activityExecutionContext, cancellationToken))!,
Path = await workflowBlueprint.GetActivityPropertyValue<ReceiveHttpRequest, PathString>(activity.Id, x => x.Path, activityExecutionContext, cancellationToken),
Method = await workflowBlueprint.GetActivityPropertyValue<ReceiveHttpRequest, string?>(activity.Id, x => x.Method, activityExecutionContext, cancellationToken)
};
}
}

View file

@ -6,7 +6,6 @@ namespace Elsa.Builders
public interface IBuilder
{
IActivityBuilder Then<T>(Action<ISetupActivity<T>>? setup, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
IActivityBuilder Then<T>(Action<T> setup, Action<IActivityBuilder>? branch = default) where T : class, IActivity;
IActivityBuilder Then<T>(Action<IActivityBuilder>? branch = default) where T : class, IActivity;
}
}

View file

@ -42,17 +42,10 @@ namespace Elsa.Builders
IActivityBuilder StartWith<T>(Action<IActivityBuilder>? branch = default)
where T : class, IActivity;
IActivityBuilder StartWith<T>(Action<T> setup, Action<IActivityBuilder>? branch = default)
where T : class, IActivity;
IActivityBuilder Add<T>(
Action<ISetupActivity<T>>? setup = default,
Action<IActivityBuilder>? branch = default) where T : class, IActivity;
IActivityBuilder Add<T>(
Action<T> setup,
Action<IActivityBuilder>? branch = default) where T : class, IActivity;
IActivityBuilder Add<T>(
Action<IActivityBuilder>? branch = default,
IDictionary<string, IActivityPropertyValueProvider>? propertyValueProviders = default)

View file

@ -1,5 +1,4 @@
using System;
using Elsa.Serialization;
using Newtonsoft.Json;
using Rebus.Extensions;

View file

@ -1,2 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=extensions/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=extensions/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cextensions/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View file

@ -0,0 +1,40 @@
using System;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Services;
using Elsa.Services.Models;
namespace Elsa
{
public static class WorkflowBlueprintExtensions
{
public static ValueTask<T> GetActivityPropertyValue<TActivity, T>(
this IWorkflowBlueprint workflowBlueprint,
string activityId,
Expression<Func<TActivity, T>> propertyExpression,
ActivityExecutionContext activityExecutionContext,
CancellationToken cancellationToken) where TActivity : IActivity
{
var expression = (MemberExpression)propertyExpression.Body;
string propertyName = expression.Member.Name;
return GetActivityPropertyValue<T>(workflowBlueprint, activityId, propertyName, activityExecutionContext, cancellationToken);
}
public static async ValueTask<T> GetActivityPropertyValue<T>(
this IWorkflowBlueprint workflowBlueprint,
string activityId,
string propertyName,
ActivityExecutionContext activityExecutionContext,
CancellationToken cancellationToken)
{
var provider = workflowBlueprint.ActivityPropertyProviders.GetProvider(activityId, propertyName);
if (provider == null)
return default!;
var value = await provider.GetValueAsync(activityExecutionContext, cancellationToken);
return (T)value!;
}
}
}

View file

@ -6,18 +6,6 @@ namespace Elsa
{
public static class WorkflowExecutionContextExtensions
{
// public static IEnumerable<IActivity> GetStartActivities(this WorkflowExecutionContext workflowExecutionContext)
// {
// var targetActivities = workflowExecutionContext.Connections.Select(x => x.Target.Activity).Distinct().ToLookup(x => x);
//
// var query =
// from activity in workflowExecutionContext.Activities
// where !targetActivities.Contains(activity)
// select activity;
//
// return query;
// }
public static IEnumerable<IConnection>
GetInboundConnections(this WorkflowExecutionContext workflowExecutionContext, string activityId) =>
workflowExecutionContext.WorkflowBlueprint.Connections.Where(x => x.Target.Activity.Id == activityId);

View file

@ -36,14 +36,12 @@ namespace Elsa.Services
public IDictionary<string, IActivityPropertyValueProvider>? GetProviders(string activityId) =>
_providers.TryGetValue(activityId, out var properties) ? properties : null;
public IActivityPropertyValueProvider? GetProvider(string activityId, string propertyName)
{
if (_providers.TryGetValue(activityId, out var properties))
if (properties.TryGetValue(propertyName, out var provider))
return provider;
return null;
}
public IActivityPropertyValueProvider? GetProvider(string activityId, string propertyName) =>
_providers.TryGetValue(activityId, out var properties)
&& properties != null
&& properties.TryGetValue(propertyName, out var provider)
? provider
: null;
public async ValueTask SetActivityPropertiesAsync(
IActivity activity,

View file

@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Services.Models;
using Elsa.Triggers;
namespace Elsa.Services
{

View file

@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Elsa.Comparers;
using Elsa.Expressions;
using Elsa.Models;
using Microsoft.Extensions.Localization;
using Newtonsoft.Json.Linq;

View file

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Models;
namespace Elsa.Triggers

View file

@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using Elsa.Services.Models;
namespace Elsa.Triggers
{

View file

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Services.Models;
namespace Elsa.Triggers

View file

@ -6,7 +6,6 @@ using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Design;
using Elsa.Events;
using Elsa.Messaging.Domain;
using Elsa.Services;
using Elsa.Services.Models;
using MediatR;

View file

@ -11,18 +11,15 @@ namespace Elsa.Builders
{
public ActivityBuilder(
Type activityType,
Action<IActivity>? setupActivity,
IWorkflowBuilder workflowBuilder,
IDictionary<string, IActivityPropertyValueProvider>? propertyValueProviders)
{
ActivityType = activityType;
SetupActivity = setupActivity;
WorkflowBuilder = workflowBuilder;
PropertyValueProviders = propertyValueProviders;
}
public Type ActivityType { get; }
public Action<IActivity>? SetupActivity { get; }
public IWorkflowBuilder WorkflowBuilder { get; }
public string ActivityId { get; set; } = default!;
public string? Name { get; set; }
@ -41,11 +38,6 @@ namespace Elsa.Builders
Action<IActivityBuilder>? branch = null)
where T : class, IActivity => When(OutcomeNames.Done).Then(setup, branch);
public IActivityBuilder Then<T>(
Action<T> setup,
Action<IActivityBuilder>? branch = null)
where T : class, IActivity => When(OutcomeNames.Done).Then(setup, branch);
public IActivityBuilder Then<T>(Action<IActivityBuilder>? branch = null)
where T : class, IActivity => When(OutcomeNames.Done).Then<T>(branch);
@ -64,7 +56,8 @@ namespace Elsa.Builders
public Func<ActivityExecutionContext, CancellationToken, ValueTask<IActivity>> BuildActivityAsync() =>
async (context, cancellationToken) =>
{
var activity = context.ActivateActivity(context.ActivityBlueprint.Type, SetupActivity);
//var activity = context.ActivateActivity(context.ActivityBlueprint.Type, SetupActivity);
var activity = context.ActivateActivity(context.ActivityBlueprint.Type);
activity.Id = ActivityId;
activity.Name = Name;
activity.Description = Description;

View file

@ -10,17 +10,17 @@ namespace Elsa.Builders
{
public static IActivityBuilder Then(this IBuilder builder,
Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> activity) =>
builder.Then<Inline>(x => x.Function = RunInline(activity));
builder.Then<Inline>(inline => inline.Set(x => x.Function, RunInline(activity)));
public static IActivityBuilder
Then(this IBuilder builder, Func<ActivityExecutionContext, ValueTask> activity) =>
builder.Then<Inline>(x => x.Function = RunInline(activity));
builder.Then<Inline>(inline => inline.Set(x => x.Function, RunInline(activity)));
public static IActivityBuilder Then(this IBuilder builder, Action<ActivityExecutionContext> activity) =>
builder.Then<Inline>(x => x.Function = RunInline(activity));
builder.Then<Inline>(inline => inline.Set(x => x.Function, RunInline(activity)));
public static IActivityBuilder Then(this IBuilder builder, Action activity) =>
builder.Then<Inline>(x => x.Function = RunInline(activity));
builder.Then<Inline>(inline => inline.Set(x => x.Function, RunInline(activity)));
private static Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> RunInline(
Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> activity) =>

View file

@ -22,11 +22,6 @@ namespace Elsa.Builders
Action<IActivityBuilder>? branch = default) where T : class, IActivity =>
Then(WorkflowBuilder.Add(setup), branch);
public IActivityBuilder Then<T>(
Action<T> setup,
Action<IActivityBuilder>? branch = default)
where T : class, IActivity => Then(WorkflowBuilder.Add(setup), branch);
public IActivityBuilder Then<T>(Action<IActivityBuilder>? branch = default)
where T : class, IActivity => Then(WorkflowBuilder.Add<T>(branch));

View file

@ -12,27 +12,27 @@ namespace Elsa.Builders
this IOutcomeBuilder outcomeBuilder,
Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> activity,
Action<IActivityBuilder>? branch = default) =>
outcomeBuilder.Then<Inline>(x => x.Function = activity, branch);
outcomeBuilder.Then<Inline>(inline => inline.Set(x => x.Function, activity), branch);
public static IActivityBuilder Then(
this IOutcomeBuilder outcomeBuilder,
Func<ActivityExecutionContext, ValueTask> activity,
Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then<Inline>(
x => x.Function = RunInline(activity),
inline => inline.Set(x => x.Function, RunInline(activity)),
branch);
public static IActivityBuilder Then(
this IOutcomeBuilder outcomeBuilder,
Action<ActivityExecutionContext> activity,
Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then<Inline>(
x => x.Function = RunInline(activity),
inline => inline.Set(x => x.Function, RunInline(activity)),
branch);
public static IActivityBuilder Then(
this IOutcomeBuilder outcomeBuilder,
Action activity,
Action<IActivityBuilder>? branch = default) => outcomeBuilder.Then<Inline>(
x => x.Function = RunInline(activity),
inline => inline.Set(x => x.Function, RunInline(activity)),
branch);
private static Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> RunInline(

View file

@ -92,11 +92,10 @@ namespace Elsa.Builders
public IActivityBuilder New(
Type activityType,
Action<IActivity>? setupActivity = default,
Action<IActivityBuilder>? branch = default,
IDictionary<string, IActivityPropertyValueProvider>? propertyValueProviders = default)
{
var activityBuilder = new ActivityBuilder(activityType, setupActivity, this, propertyValueProviders);
var activityBuilder = new ActivityBuilder(activityType, this, propertyValueProviders);
branch?.Invoke(activityBuilder);
return activityBuilder;
}
@ -105,7 +104,7 @@ namespace Elsa.Builders
Action<IActivityBuilder>? branch = default,
IDictionary<string, IActivityPropertyValueProvider>? propertyValueProviders = default)
where T : class, IActivity =>
New(typeof(T), null, branch, propertyValueProviders);
New(typeof(T), branch, propertyValueProviders);
public IActivityBuilder New<T>(
Action<ISetupActivity<T>>? setup = default,
@ -121,11 +120,6 @@ namespace Elsa.Builders
return New<T>(branch, valueProviders);
}
public IActivityBuilder New<T>(
Action<T>? setup,
Action<IActivityBuilder>? branch = default) where T : class, IActivity =>
New(typeof(T), x => setup?.Invoke((T)x), branch);
public IActivityBuilder StartWith<T>(
Action<ISetupActivity<T>>? setup = default,
Action<IActivityBuilder>? branch = default) where T : class, IActivity
@ -134,14 +128,6 @@ namespace Elsa.Builders
return Add(activityBuilder, branch);
}
public IActivityBuilder StartWith<T>(
Action<T>? setup,
Action<IActivityBuilder>? branch = default) where T : class, IActivity
{
var activityBuilder = New(setup, branch);
return Add(activityBuilder, branch);
}
public IActivityBuilder StartWith<T>(Action<IActivityBuilder>? branch = default)
where T : class, IActivity =>
Add<T>(branch);
@ -154,21 +140,12 @@ namespace Elsa.Builders
return Add(activityBuilder, branch);
}
public IActivityBuilder Add<T>(
Action<T> setup,
Action<IActivityBuilder>? branch = default)
where T : class, IActivity
{
var activityBuilder = New(setup, branch);
return Add(activityBuilder, branch);
}
public IActivityBuilder Add<T>(
Action<IActivityBuilder>? branch = default,
IDictionary<string, IActivityPropertyValueProvider>? propertyValueProviders = default)
where T : class, IActivity
{
var activityBuilder = new ActivityBuilder(typeof(T), null, this, propertyValueProviders);
var activityBuilder = new ActivityBuilder(typeof(T), this, propertyValueProviders);
return Add(activityBuilder);
}
@ -196,11 +173,6 @@ namespace Elsa.Builders
Action<IActivityBuilder>? branch = default)
where T : class, IActivity => StartWith(setup, branch);
public IActivityBuilder Then<T>(
Action<T>? setup = default,
Action<IActivityBuilder>? branch = default)
where T : class, IActivity => StartWith(setup, branch);
public IActivityBuilder Then<T>(Action<IActivityBuilder>? branch = default)
where T : class, IActivity => StartWith<T>(branch);

View file

@ -9,21 +9,21 @@ namespace Elsa.Builders
public static class WorkflowBuilderExtensions
{
public static IActivityBuilder StartWith(this IWorkflowBuilder builder, Action action) =>
builder.StartWith<Inline>(x => x.Function = RunInline(action));
builder.StartWith<Inline>(inline => inline.Set(x => x.Function, RunInline(action)));
public static IActivityBuilder
StartWith(this IWorkflowBuilder builder, Action<ActivityExecutionContext> action) =>
builder.StartWith<Inline>(x => x.Function = RunInline(action));
builder.StartWith<Inline>(inline => inline.Set(x => x.Function, RunInline(action)));
public static IActivityBuilder StartWith(
this IWorkflowBuilder builder,
Func<ActivityExecutionContext, ValueTask> action) =>
builder.StartWith<Inline>(x => x.Function = RunInline(action));
builder.StartWith<Inline>(inline => inline.Set(x => x.Function, RunInline(action)));
public static IActivityBuilder StartWith(
this IWorkflowBuilder builder,
Func<ActivityExecutionContext, ValueTask<IActivityExecutionResult>> action) =>
builder.StartWith<Inline>(x => x.Function = RunInline(action));
builder.StartWith<Inline>(inline => inline.Set(x => x.Function, RunInline(action)));
public static IActivityBuilder SetVariable(this IWorkflowBuilder builder, string variableName, object? value) =>
builder.StartWith<SetVariable>(

View file

@ -1,6 +1,5 @@
using System.Threading;
using System.Threading.Tasks;
using Elsa.Runtime;
using Elsa.Services;
namespace Elsa.Data.Services

View file

@ -1,6 +1,5 @@
using System.Threading;
using System.Threading.Tasks;
using Elsa.Runtime;
using Elsa.Services;
using YesSql;

View file

@ -12,7 +12,6 @@ using Elsa.Expressions;
using Elsa.Indexes;
using Elsa.Messages;
using Elsa.Messaging;
using Elsa.Messaging.Distributed;
using Elsa.Messaging.Distributed.Handlers;
using Elsa.Metadata;
using Elsa.Metadata.Handlers;

View file

@ -1,7 +1,6 @@
using System.Linq;
using System.Reflection;
using Elsa.Expressions;
using Elsa.Serialization;
using Newtonsoft.Json.Linq;
using Rebus.Extensions;

View file

@ -1,21 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Elsa.ActivityResults;
using Elsa.Events;
using Elsa.Exceptions;
using Elsa.Expressions;
using Elsa.Messaging.Domain;
using Elsa.Models;
using Elsa.Services.Models;
using Elsa.Triggers;
using MediatR;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Open.Linq.AsyncExtensions;
namespace Elsa.Services
{

View file

@ -9,8 +9,6 @@ using Elsa.Exceptions;
using Elsa.Extensions;
using Elsa.Indexes;
using Elsa.Messages;
using Elsa.Messaging.Distributed;
using Elsa.Messaging.Domain;
using Elsa.Models;
using Elsa.Queries;
using Elsa.Services.Models;

View file

@ -3,7 +3,6 @@ using System.Threading.Tasks;
using Elsa.DistributedLock;
using Elsa.Models;
using Elsa.Queries;
using Elsa.Runtime;
using Elsa.Services;
namespace Elsa.StartupTasks

View file

@ -1,8 +1,6 @@
using System.Threading;
using System.Threading.Tasks;
using Elsa.Messages;
using Elsa.Messaging.Distributed;
using Elsa.Runtime;
using Elsa.Services;
using Rebus.Bus;

View file

@ -5,7 +5,6 @@ using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Services;
using Elsa.Services.Models;
using Open.Linq.AsyncExtensions;
namespace Elsa.Triggers

View file

@ -2,7 +2,6 @@
using System.Threading.Tasks;
using Elsa.Activities.Console;
using Elsa.Builders;
using Elsa.Runtime;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;