Generate package Caspian.WorkflowFramework.1.1.0-preview.1.nupkg
This commit is contained in:
@@ -1,14 +1,33 @@
|
||||
using Caspian.WorkflowFramework.Contracts;
|
||||
using Caspian.WorkflowFramework.Services;
|
||||
using Elsa.Extensions;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Elsa.Caching.Options;
|
||||
using Elsa.Common.RecurringTasks;
|
||||
using Elsa.Common.Serialization;
|
||||
using Elsa.EntityFrameworkCore.Extensions;
|
||||
using Elsa.EntityFrameworkCore.Modules.Alterations;
|
||||
using Elsa.EntityFrameworkCore.Modules.Identity;
|
||||
using Elsa.EntityFrameworkCore.Modules.Management;
|
||||
using Elsa.EntityFrameworkCore.Modules.Runtime;
|
||||
using Elsa.EntityFrameworkCore.Modules.Identity;
|
||||
using Elsa.Email;
|
||||
using Elsa.EntityFrameworkCore.Modules.Tenants;
|
||||
using Elsa.Extensions;
|
||||
using Elsa.Kafka.Factories;
|
||||
using Elsa.OpenTelemetry.Middleware;
|
||||
using Elsa.Secrets.Management.Tasks;
|
||||
using Elsa.Secrets.Persistence;
|
||||
using Elsa.Server.Web;
|
||||
using Elsa.Server.Web.Messages;
|
||||
using Elsa.Workflows;
|
||||
using Elsa.Workflows.IncidentStrategies;
|
||||
using Elsa.Workflows.LogPersistence;
|
||||
using Elsa.Workflows.Management;
|
||||
using Elsa.Workflows.Options;
|
||||
using Elsa.Workflows.Runtime.Distributed.Extensions;
|
||||
using Elsa.Workflows.Runtime.Options;
|
||||
using Elsa.Workflows.Runtime.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using San.MongoLogger;
|
||||
using San.MongoLogger.Models;
|
||||
|
||||
@@ -16,57 +35,144 @@ namespace Caspian.WorkflowFramework;
|
||||
|
||||
public static class DependencyInjection
|
||||
{
|
||||
public static void AddWorkflowFramework(this IHostApplicationBuilder builder, string connectionString)
|
||||
public static void AddWorkflowFramework(this IHostApplicationBuilder builder, string sqlServerConnectionString)
|
||||
{
|
||||
//var configuration = new ConfigurationBuilder()
|
||||
// .AddJsonFile(appsettingName, optional: false, reloadOnChange: true)
|
||||
// .Build();
|
||||
//var sqlServerConnectionString = configuration.GetConnectionString("SqlServer")!;
|
||||
|
||||
var sqlDatabaseProvider = Enum.Parse<SqlDatabaseProvider>("SqlServer");
|
||||
const bool useDbContextPooling = false;
|
||||
const bool runEFCoreMigrations = true;
|
||||
const bool useCaching = true;
|
||||
const bool useReadOnlyMode = false;
|
||||
const WorkflowRuntime workflowRuntime = WorkflowRuntime.Distributed;
|
||||
const bool disableVariableWrappers = false;
|
||||
const bool disableVariableCopying = false;
|
||||
|
||||
// Optionally create type aliases for easier configuration.
|
||||
TypeAliasRegistry.RegisterAlias("OrderReceivedProducerFactory", typeof(GenericProducerFactory<string, OrderReceived>));
|
||||
TypeAliasRegistry.RegisterAlias("OrderReceivedConsumerFactory", typeof(GenericConsumerFactory<string, OrderReceived>));
|
||||
|
||||
// Add Elsa services.
|
||||
builder.Services.AddScoped<IPropertyUIHandler, CustomCheckListOptionsProvider>();
|
||||
|
||||
builder.Services.AddMongoLogger<LogModel>(builder.Configuration);
|
||||
|
||||
builder.Services.AddElsa(elsa =>
|
||||
{
|
||||
// Configure Management layer to use EF Core.
|
||||
elsa.UseWorkflowManagement(management => management
|
||||
.UseEntityFrameworkCore(ef => ef.UseSqlServer(connectionString)));
|
||||
elsa
|
||||
.UseWorkflows(workflows =>
|
||||
{
|
||||
workflows.WithDefaultWorkflowExecutionPipeline(pipeline => pipeline.UseWorkflowExecutionTracing());
|
||||
workflows.WithDefaultActivityExecutionPipeline(pipeline => pipeline.UseActivityExecutionTracing());
|
||||
workflows.UseCommitStrategies(strategies =>
|
||||
{
|
||||
strategies.AddStandardStrategies();
|
||||
//می خوایم سریع انجام شه
|
||||
//strategies.Add("Every 10 seconds", new PeriodicWorkflowStrategy(TimeSpan.FromSeconds(10)));
|
||||
});
|
||||
})
|
||||
.UseWorkflowManagement(management =>
|
||||
{
|
||||
management.UseEntityFrameworkCore(ef =>
|
||||
{
|
||||
ef.UseSqlServer(sqlServerConnectionString);
|
||||
});
|
||||
|
||||
// Configure Runtime layer to use EF Core.
|
||||
elsa.UseWorkflowRuntime(runtime => runtime
|
||||
.UseEntityFrameworkCore(ef => ef.UseSqlServer(connectionString)));
|
||||
if (useCaching)
|
||||
management.UseCache();
|
||||
|
||||
// Expose Elsa API endpoints.
|
||||
elsa.UseWorkflowsApi();
|
||||
management.SetDefaultLogPersistenceMode(LogPersistenceMode.Inherit);
|
||||
management.UseReadOnlyMode(useReadOnlyMode);
|
||||
management.AddVariableTypeAndAlias<OrderReceived>("Application");
|
||||
})
|
||||
.UseWorkflowRuntime(runtime =>
|
||||
{
|
||||
runtime.UseEntityFrameworkCore(ef =>
|
||||
{
|
||||
ef.UseContextPooling = useDbContextPooling;
|
||||
|
||||
// Enable C# workflow expressions
|
||||
elsa.UseCSharp();
|
||||
var migrationsAssembly = typeof(Elsa.EntityFrameworkCore.SqlServer.IdentityDbContextFactory).Assembly;
|
||||
var connectionString = sqlServerConnectionString;
|
||||
ef.DbContextOptionsBuilder = (_, db) => db.UseElsaSqlServer(migrationsAssembly, connectionString, null, configure => configure.CommandTimeout(60000));
|
||||
|
||||
// Enable JavaScript workflow expressions
|
||||
elsa.UseJavaScript(options => options.AllowClrAccess = true);
|
||||
ef.RunMigrations = runEFCoreMigrations;
|
||||
});
|
||||
|
||||
if (workflowRuntime == WorkflowRuntime.Distributed)
|
||||
{
|
||||
runtime.UseDistributedRuntime();
|
||||
}
|
||||
|
||||
if (useCaching)
|
||||
runtime.UseCache();
|
||||
})
|
||||
.UseCSharp(options =>
|
||||
{
|
||||
options.DisableWrappers = disableVariableWrappers;
|
||||
//options.AppendScript("string Greet(string name) => $\"Hello {name}!\";");
|
||||
//options.AppendScript("string SayHelloWorld() => Greet(\"World\");");
|
||||
})
|
||||
.UseJavaScript(options =>
|
||||
{
|
||||
options.AllowClrAccess = true;
|
||||
options.DisableWrappers = disableVariableWrappers;
|
||||
options.DisableVariableCopying = disableVariableCopying;
|
||||
options.RegisterType<OrderReceived>();
|
||||
//options.ConfigureEngine(engine =>
|
||||
//{
|
||||
// engine.Execute("function greet(name) { return `Hello ${name}!`; }");
|
||||
// engine.Execute("function sayHelloWorld() { return greet('World'); }");
|
||||
//});
|
||||
})
|
||||
.UseWorkflowContexts();
|
||||
|
||||
//elsa.AddFastEndpointsAssembly<Program>();
|
||||
});
|
||||
|
||||
//// Configure CORS to allow designer app hosted on a different origin to invoke the APIs.
|
||||
//builder.Services.AddCors(cors => cors
|
||||
// .AddDefaultPolicy(policy => policy
|
||||
// .AllowAnyOrigin() // For demo purposes only. Use a specific origin instead.
|
||||
// .AllowAnyHeader()
|
||||
// .AllowAnyMethod()
|
||||
// .WithExposedHeaders("x-elsa-workflow-instance-id"))); // Required for Elsa Studio in order to support running workflows from the designer. Alternatively, you can use the `*` wildcard to expose all headers.
|
||||
// Optionally configure recurring tasks using alternative schedules.
|
||||
builder.Services.Configure<RecurringTaskOptions>(options =>
|
||||
{
|
||||
options.Schedule.ConfigureTask<TriggerBookmarkQueueRecurringTask>(TimeSpan.FromSeconds(300));
|
||||
options.Schedule.ConfigureTask<PurgeBookmarkQueueRecurringTask>(TimeSpan.FromSeconds(300));
|
||||
options.Schedule.ConfigureTask<UpdateExpiredSecretsRecurringTask>(TimeSpan.FromHours(4));
|
||||
options.Schedule.ConfigureTask<RestartInterruptedWorkflowsTask>(TimeSpan.FromSeconds(15));
|
||||
});
|
||||
|
||||
|
||||
// Add Health Checks.
|
||||
builder.Services.AddHealthChecks();
|
||||
builder.Services.Configure<RuntimeOptions>(options => { options.InactivityThreshold = TimeSpan.FromSeconds(15); });
|
||||
builder.Services.Configure<BookmarkQueuePurgeOptions>(options => options.Ttl = TimeSpan.FromSeconds(10));
|
||||
builder.Services.Configure<CachingOptions>(options => options.CacheDuration = TimeSpan.FromDays(1));
|
||||
builder.Services.Configure<IncidentOptions>(options => options.DefaultIncidentStrategy = typeof(ContinueWithIncidentsStrategy));
|
||||
//builder.Services.AddHealthChecks();
|
||||
|
||||
builder.Services.AddScoped<IWorkflowService, WorkflowService>();
|
||||
}
|
||||
|
||||
public static void UseWorkflowFramework(this IApplicationBuilder app)
|
||||
{
|
||||
try
|
||||
{
|
||||
app.UseMongoLogger<LogModel>();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var d = ex;
|
||||
}
|
||||
//try
|
||||
//{
|
||||
// app.UseMongoLogger<LogModel>();
|
||||
//}
|
||||
//catch (Exception ex)
|
||||
//{
|
||||
// var d = ex;
|
||||
//}
|
||||
|
||||
//app.UseWorkflowsApi(); // Use Elsa API endpoints.
|
||||
app.UseWorkflows(); // Use Elsa middleware to handle HTTP requests mapped to HTTP Endpoint activities.
|
||||
// Configure the pipeline.
|
||||
var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
|
||||
if (env.IsDevelopment())
|
||||
app.UseDeveloperExceptionPage();
|
||||
|
||||
// Health checks.
|
||||
//app.MapHealthChecks("/");
|
||||
|
||||
// Captures unhandled exceptions and returns a JSON response.
|
||||
app.UseJsonSerializationErrorHandler();
|
||||
|
||||
//app.UseWorkflows();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user