elsa-core/src/samples/aspnet/Elsa.Samples.Web1/Program.cs

122 lines
3.9 KiB
C#
Raw Normal View History

2022-01-04 08:42:12 +00:00
using Elsa.Activities.Console;
using Elsa.Activities.ControlFlow;
using Elsa.Activities.Workflows;
using Elsa.Api.Extensions;
using Elsa.Extensions;
using Elsa.Management.Contracts;
using Elsa.Management.Extensions;
using Elsa.Mediator.Extensions;
using Elsa.Modules.AzureServiceBus.Activities;
using Elsa.Modules.AzureServiceBus.Extensions;
2022-02-01 19:45:11 +00:00
using Elsa.Modules.Http;
using Elsa.Modules.Http.Extensions;
2022-01-14 12:54:17 +00:00
using Elsa.Modules.Quartz.Services;
2022-02-01 19:45:11 +00:00
using Elsa.Modules.Scheduling.Activities;
using Elsa.Modules.Scheduling.Extensions;
using Elsa.Modules.Scheduling.Triggers;
2022-01-04 08:42:12 +00:00
using Elsa.Persistence.EntityFrameworkCore.Extensions;
using Elsa.Persistence.EntityFrameworkCore.Sqlite;
using Elsa.Persistence.Middleware.WorkflowExecution;
using Elsa.Pipelines.WorkflowExecution.Components;
using Elsa.Runtime.Middleware;
2022-01-04 08:42:12 +00:00
using Elsa.Runtime.ProtoActor.Extensions;
using Elsa.Samples.Web1.Activities;
using Elsa.Samples.Web1.Workflows;
using Elsa.Scheduling.Extensions;
2022-01-12 10:15:07 +00:00
using Elsa.Scripting.JavaScript.Extensions;
2022-01-12 11:37:40 +00:00
using Elsa.Scripting.Liquid.Extensions;
2022-01-04 08:42:12 +00:00
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
2022-01-04 08:42:12 +00:00
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;
2022-01-04 08:42:12 +00:00
// Add services.
services
.AddElsa()
.AddMediator()
.AddEntityFrameworkCorePersistence((_, ef) => ef.UseSqlite())
.AddProtoActorWorkflowHost()
2022-01-04 08:42:12 +00:00
.IndexWorkflowTriggers()
.AddElsaManagement()
.AddScheduling(new QuartzSchedulingServiceProvider())
2022-01-04 08:42:12 +00:00
.AddHttpActivityServices()
.AddSchedulingActivities()
.AddAzureServiceBusServices(options => configuration.GetSection("AzureServiceBus").Bind(options))
2022-01-04 08:42:12 +00:00
.ConfigureWorkflowRuntime(options =>
{
options.Workflows.Add("HelloWorldWorkflow", new HelloWorldWorkflow());
options.Workflows.Add("HttpWorkflow", new HttpWorkflow());
options.Workflows.Add("ForkedHttpWorkflow", new ForkedHttpWorkflow());
options.Workflows.Add("AzureServiceBusWorkflow", new AzureServiceBusWorkflow());
2022-01-04 08:42:12 +00:00
options.Workflows.Add(nameof(CompositeActivitiesWorkflow), new CompositeActivitiesWorkflow());
});
// Testing only: allow client app to connect from anywhere.
services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));
// Register available activities.
services
.AddActivity<WriteLine>()
.AddActivity<WriteLines>()
.AddActivity<ReadLine>()
.AddActivity<If>()
.AddActivity<HttpTrigger>()
.AddActivity<Flowchart>()
.AddActivity<Delay>()
2022-01-18 21:37:14 +00:00
.AddActivity<ForEach>()
.AddActivity<Switch>()
.AddActivity<Send>()
;
2022-01-04 08:42:12 +00:00
// Register available triggers.
services
.AddTrigger<HttpTrigger>()
.AddTrigger<Timer>();
2022-01-04 08:42:12 +00:00
2022-01-11 12:28:21 +00:00
// Register scripting languages.
2022-01-12 11:37:40 +00:00
services
.AddJavaScriptExpressions()
.AddLiquidExpressions();
2022-01-11 12:28:21 +00:00
2022-01-04 08:42:12 +00:00
// Configure middleware pipeline.
var app = builder.Build();
var serviceProvider = app.Services;
// Add type aliases for prettier JSON serialization.
var wellKnownTypeRegistry = serviceProvider.GetRequiredService<IWellKnownTypeRegistry>();
wellKnownTypeRegistry.RegisterType<int>("int");
wellKnownTypeRegistry.RegisterType<float>("float");
wellKnownTypeRegistry.RegisterType<bool>("boolean");
wellKnownTypeRegistry.RegisterType<string>("string");
// Configure workflow engine execution pipeline.
serviceProvider.ConfigureDefaultWorkflowExecutionPipeline(pipeline => pipeline
.UsePersistence()
.UseWorkflowExecutionLogPersistence()
.UseWorkflowExecutionEvents()
2022-01-04 08:42:12 +00:00
.UseActivityScheduler()
);
if (app.Environment.IsDevelopment())
app.UseDeveloperExceptionPage();
// CORS.
app.UseCors();
// Root.
app.MapGet("/", () => "Hello World!");
// Map Elsa API endpoints.
app.MapElsaApiEndpoints();
// Register Elsa middleware.
app.UseJsonSerializationErrorHandler();
app.UseHttpActivities();
// Run.
app.Run();