Seperate YesSql (#504)

* Seperate YesSql and added InMemory, MongoDb

* Error fixed, if DatabaseInitializer is run through several times

* icon.png was not packed

* Added AddWorkflowProvider to AddElsaPersistenceMongoDb

* Wrong primary keys were used for MongoDb

* Refactorig MongoDb

* Register IMongoCollection<WorkflowDefinition> and IMongoCollection<WorkflowInstance> with DI

* Wrong Parameter Type in Constructor (MongoDbWorkflowInstanceRepository)

* Add workflowDefinition.WorkflowDefinitionId = _idGenerator.Generate(); to Initialize

* Removed duplicated code

* Correct wrong Commit

Co-authored-by: Rafael Carnucci <rafael.carnucci@icn.de>
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
This commit is contained in:
Rafael Carnucci 2020-12-11 21:03:49 +01:00 committed by GitHub
parent 65a266dfdb
commit 3b35d9ff0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
129 changed files with 1947 additions and 1081 deletions

865
Elsa.sln
View file

@ -1,484 +1,381 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29509.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Core", "src\core\Elsa.Core\Elsa.Core.csproj", "{300EE2D5-54C5-46F2-AD03-BB43589EA074}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{7165BB9E-F22C-40D2-B7B1-CA3EFA2529A0}"
ProjectSection(SolutionItems) = preProject
.dockerignore = .dockerignore
.editorconfig = .editorconfig
.gitignore = .gitignore
docker-compose.yaml = docker-compose.yaml
Dockerfile = Dockerfile
Nuget.Config = Nuget.Config
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Abstractions", "src\core\Elsa.Abstractions\Elsa.Abstractions.csproj", "{3130C574-557C-4DA2-933E-AED7A9EBE48A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Console", "src\activities\Elsa.Activities.Console\Elsa.Activities.Console.csproj", "{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Http", "src\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj", "{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "activities", "activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Email", "src\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj", "{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Timers", "src\activities\Elsa.Activities.Timers\Elsa.Activities.Timers.csproj", "{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.MassTransit", "src\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj", "{C4939482-9447-47D1-B6AF-E9F8C6323841}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{5E5E1E84-DDBC-40D6-B891-0D563A15A44A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.UserTask", "src\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj", "{823F80B6-E241-43F7-83BD-29FBB58A77F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Dropbox", "src\activities\Elsa.Activities.Dropbox\Elsa.Activities.Dropbox.csproj", "{79E85459-EF54-44D6-9508-1E68B8238D00}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{9C3C685E-3D7D-4638-A031-24F71CF74B52}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa", "src\core\Elsa\Elsa.csproj", "{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.JavaScript", "src\scripting\Elsa.Scripting.JavaScript\Elsa.Scripting.JavaScript.csproj", "{18BE8F72-E528-4617-B1B1-07BD35337DFC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.Liquid", "src\scripting\Elsa.Scripting.Liquid\Elsa.Scripting.Liquid.csproj", "{01DC21DD-C6E2-4B21-864E-97D29448F777}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{468E498C-59DB-4541-8D8A-0D89DE9083AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.Host", "src\server\Elsa.Server.Host\Elsa.Server.Host.csproj", "{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{AB1AE008-6FD6-414C-8E88-D735F42E1FA6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{0A3C36AB-2ACF-4175-A512-66B4C3DB9371}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared", "test\shared\Elsa.Testing.Shared\Elsa.Testing.Shared.csproj", "{E7C689EB-5AD6-4E91-A007-6116EEA702FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.SqlServer", "src\providers\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj", "{150EF356-E8BC-4922-91C2-362017479409}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\providers\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{EBD49CCA-5400-4C36-B5DF-7B28190AA323}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.AzureBlob", "src\providers\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{E20238CE-5C64-4F87-8753-3B4E1EC9A740}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locking", "locking", "{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Core.IntegrationTests", "test\integration\Elsa.Core.IntegrationTests\Elsa.Core.IntegrationTests.csproj", "{4CB34AB3-01C9-4911-8914-EABAA744EAD3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "component", "component", "{FC47A50F-03B2-47D8-AAFB-075314FBA186}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.ComponentTests", "test\component\Elsa.ComponentTests\Elsa.ComponentTests.csproj", "{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Server.Api", "src\server\Elsa.Server.Api\Elsa.Server.Api.csproj", "{44E0B699-A140-4551-A0E9-9FD9F171A9C2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{E43FB9E7-7851-4880-B7EE-12B8CEE628D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Client", "src\clients\Elsa.Client\Elsa.Client.csproj", "{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dashboards", "dashboards", "{5583B236-794A-422C-B306-52BB7DFE7EBE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{5837821B-CA71-40B6-A9F1-C25D318B4691}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Backend", "src\dashboards\blazor\ElsaDashboard.Backend\ElsaDashboard.Backend.csproj", "{25015984-7F81-454C-AC6E-E6DC810A59E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Shared", "src\dashboards\blazor\ElsaDashboard.Shared\ElsaDashboard.Shared.csproj", "{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.WebAssembly", "src\dashboards\blazor\ElsaDashboard.WebAssembly\ElsaDashboard.WebAssembly.csproj", "{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application", "src\dashboards\blazor\ElsaDashboard.Application\ElsaDashboard.Application.csproj", "{EDD20103-2089-48D7-A445-6FA8183CA376}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application.Server", "src\dashboards\blazor\ElsaDashboard.Application.Server\ElsaDashboard.Application.Server.csproj", "{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application.WebAssembly", "src\dashboards\blazor\ElsaDashboard.Application.WebAssembly\ElsaDashboard.Application.WebAssembly.csproj", "{F7181887-E6B5-4DA9-9598-8E9E806B5A20}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Rebus", "src\activities\Elsa.Activities.Rebus\Elsa.Activities.Rebus.csproj", "{115DEB38-679F-467E-8F87-9E669DFD2EB8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "servicebus", "servicebus", "{47EDFC14-BB99-44BF-A447-035D40D7347B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Rebus.AzureServiceBus", "src\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj", "{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Rebus.RabbitMq", "src\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj", "{FC656D28-1AA3-462D-9B18-A10436E47C08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.AzureServiceBus", "src\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj", "{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "worker", "worker", "{E42743A0-FBDD-4150-9D53-6000496D9B87}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "console", "console", "{FC9F520F-BA51-4AD2-BFEE-EF787798E734}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnet", "aspnet", "{22E75696-6FE9-436A-9097-EE21C603F818}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ContextualWorkflowHttp", "src\samples\aspnet\Elsa.Samples.ContextualWorkflowHttp\Elsa.Samples.ContextualWorkflowHttp.csproj", "{2EC02600-8367-4B25-8243-CA4E53FA00FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CorrelationHttp", "src\samples\aspnet\Elsa.Samples.CorrelationHttp\Elsa.Samples.CorrelationHttp.csproj", "{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomActivities", "src\samples\aspnet\Elsa.Samples.CustomActivities\Elsa.Samples.CustomActivities.csproj", "{AC6AA60A-393F-4D49-B3F1-44F567B18E22}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForkJoinTimerAndSignalHttp", "src\samples\aspnet\Elsa.Samples.ForkJoinTimerAndSignalHttp\Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj", "{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldHttp", "src\samples\aspnet\Elsa.Samples.HelloWorldHttp\Elsa.Samples.HelloWorldHttp.csproj", "{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadModelHttp", "src\samples\aspnet\Elsa.Samples.ReadModelHttp\Elsa.Samples.ReadModelHttp.csproj", "{795FF94C-F22C-45A3-9643-88EED173D6D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DeclarativeCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.DeclarativeCompositeActivitiesConsole\Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj", "{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.FileBasedWorkflow", "src\samples\console\Elsa.Samples.FileBasedWorkflow\Elsa.Samples.FileBasedWorkflow.csproj", "{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForLoopConsole", "src\samples\console\Elsa.Samples.ForLoopConsole\Elsa.Samples.ForLoopConsole.csproj", "{F5124847-D046-4458-A89D-CD796FEDEE1A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.GoBackConsole", "src\samples\console\Elsa.Samples.GoBackConsole\Elsa.Samples.GoBackConsole.csproj", "{0B147307-64FF-4496-9DC9-8F83013AC045}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldConsole", "src\samples\console\Elsa.Samples.HelloWorldConsole\Elsa.Samples.HelloWorldConsole.csproj", "{935888CF-E871-42BB-A47D-5E1168269A03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.IfElseConsole", "src\samples\console\Elsa.Samples.IfElseConsole\Elsa.Samples.IfElseConsole.csproj", "{EA1D7E39-D77D-4B13-BAD0-76BA30547019}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ProgrammaticCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.ProgrammaticCompositeActivitiesConsole\Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj", "{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadLineEchoConsole", "src\samples\console\Elsa.Samples.ReadLineEchoConsole\Elsa.Samples.ReadLineEchoConsole.csproj", "{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Serialization", "src\samples\console\Elsa.Samples.Serialization\Elsa.Samples.Serialization.csproj", "{823EB953-0B26-4D85-9B3F-14FCB476E987}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.SignalingConsole", "src\samples\console\Elsa.Samples.SignalingConsole\Elsa.Samples.SignalingConsole.csproj", "{83929B86-434B-4C24-9B02-1F944DF8D71C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopConsole", "src\samples\console\Elsa.Samples.WhileLoopConsole\Elsa.Samples.WhileLoopConsole.csproj", "{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AzureServiceBusWorker", "src\samples\worker\Elsa.Samples.AzureServiceBusWorker\Elsa.Samples.AzureServiceBusWorker.csproj", "{F958B682-5192-4287-BF80-CB7B30ECFC9E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DistributedLock", "src\samples\worker\Elsa.Samples.DistributedLock\Elsa.Samples.DistributedLock.csproj", "{F081EE15-7E1A-4E8C-B91F-5472ED565431}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.MultiTenantChildWorker", "src\samples\worker\Elsa.Samples.MultiTenantChildWorker\Elsa.Samples.MultiTenantChildWorker.csproj", "{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RebusWorker", "src\samples\worker\Elsa.Samples.RebusWorker\Elsa.Samples.RebusWorker.csproj", "{6837DB22-1F5C-42E1-A466-E4597AF6E91E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RunChildWorkflowWorker", "src\samples\worker\Elsa.Samples.RunChildWorkflowWorker\Elsa.Samples.RunChildWorkflowWorker.csproj", "{A4DF29BD-95CC-4A86-96EC-FB6692270E68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers", "src\samples\worker\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopWorker", "src\samples\worker\Elsa.Samples.WhileLoopWorker\Elsa.Samples.WhileLoopWorker.csproj", "{EA3832C4-8079-4E84-AF8C-12744E4EFD44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomAttributesChildWorker", "src\samples\worker\Elsa.Samples.CustomAttributesChildWorker\Elsa.Samples.CustomAttributesChildWorker.csproj", "{AEA00027-F280-43A4-AC60-E2AF3014CF34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Interrupts", "src\samples\aspnet\Elsa.Samples.Interrupts\Elsa.Samples.Interrupts.csproj", "{E0090EF3-C4A7-4262-9300-1D395BE25DD0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.Build.0 = Debug|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.ActiveCfg = Release|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.Build.0 = Release|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.Build.0 = Release|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.Build.0 = Release|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.Build.0 = Release|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.Build.0 = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.Build.0 = Release|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.Build.0 = Release|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.Build.0 = Release|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Release|Any CPU.Build.0 = Release|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Release|Any CPU.Build.0 = Release|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Release|Any CPU.Build.0 = Release|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.Build.0 = Debug|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.ActiveCfg = Release|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.Build.0 = Release|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Release|Any CPU.Build.0 = Release|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Release|Any CPU.Build.0 = Release|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Debug|Any CPU.Build.0 = Debug|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Release|Any CPU.ActiveCfg = Release|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Release|Any CPU.Build.0 = Release|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Release|Any CPU.Build.0 = Release|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.Build.0 = Release|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Release|Any CPU.Build.0 = Release|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Release|Any CPU.Build.0 = Release|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Release|Any CPU.Build.0 = Release|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Release|Any CPU.Build.0 = Release|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Release|Any CPU.Build.0 = Release|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Release|Any CPU.Build.0 = Release|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Debug|Any CPU.Build.0 = Debug|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Release|Any CPU.ActiveCfg = Release|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Release|Any CPU.Build.0 = Release|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Release|Any CPU.Build.0 = Release|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Release|Any CPU.Build.0 = Release|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Release|Any CPU.Build.0 = Release|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Release|Any CPU.Build.0 = Release|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Release|Any CPU.Build.0 = Release|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Release|Any CPU.Build.0 = Release|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Release|Any CPU.Build.0 = Release|Any CPU
{2EC02600-8367-4B25-8243-CA4E53FA00FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2EC02600-8367-4B25-8243-CA4E53FA00FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2EC02600-8367-4B25-8243-CA4E53FA00FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2EC02600-8367-4B25-8243-CA4E53FA00FA}.Release|Any CPU.Build.0 = Release|Any CPU
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}.Release|Any CPU.Build.0 = Release|Any CPU
{AC6AA60A-393F-4D49-B3F1-44F567B18E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AC6AA60A-393F-4D49-B3F1-44F567B18E22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AC6AA60A-393F-4D49-B3F1-44F567B18E22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AC6AA60A-393F-4D49-B3F1-44F567B18E22}.Release|Any CPU.Build.0 = Release|Any CPU
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}.Release|Any CPU.Build.0 = Release|Any CPU
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}.Release|Any CPU.ActiveCfg = Release|Any CPU
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}.Release|Any CPU.Build.0 = Release|Any CPU
{795FF94C-F22C-45A3-9643-88EED173D6D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{795FF94C-F22C-45A3-9643-88EED173D6D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{795FF94C-F22C-45A3-9643-88EED173D6D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{795FF94C-F22C-45A3-9643-88EED173D6D4}.Release|Any CPU.Build.0 = Release|Any CPU
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}.Release|Any CPU.Build.0 = Release|Any CPU
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}.Release|Any CPU.Build.0 = Release|Any CPU
{F5124847-D046-4458-A89D-CD796FEDEE1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F5124847-D046-4458-A89D-CD796FEDEE1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F5124847-D046-4458-A89D-CD796FEDEE1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F5124847-D046-4458-A89D-CD796FEDEE1A}.Release|Any CPU.Build.0 = Release|Any CPU
{0B147307-64FF-4496-9DC9-8F83013AC045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B147307-64FF-4496-9DC9-8F83013AC045}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B147307-64FF-4496-9DC9-8F83013AC045}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B147307-64FF-4496-9DC9-8F83013AC045}.Release|Any CPU.Build.0 = Release|Any CPU
{935888CF-E871-42BB-A47D-5E1168269A03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{935888CF-E871-42BB-A47D-5E1168269A03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{935888CF-E871-42BB-A47D-5E1168269A03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{935888CF-E871-42BB-A47D-5E1168269A03}.Release|Any CPU.Build.0 = Release|Any CPU
{EA1D7E39-D77D-4B13-BAD0-76BA30547019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA1D7E39-D77D-4B13-BAD0-76BA30547019}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA1D7E39-D77D-4B13-BAD0-76BA30547019}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA1D7E39-D77D-4B13-BAD0-76BA30547019}.Release|Any CPU.Build.0 = Release|Any CPU
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}.Release|Any CPU.Build.0 = Release|Any CPU
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}.Release|Any CPU.Build.0 = Release|Any CPU
{823EB953-0B26-4D85-9B3F-14FCB476E987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{823EB953-0B26-4D85-9B3F-14FCB476E987}.Debug|Any CPU.Build.0 = Debug|Any CPU
{823EB953-0B26-4D85-9B3F-14FCB476E987}.Release|Any CPU.ActiveCfg = Release|Any CPU
{823EB953-0B26-4D85-9B3F-14FCB476E987}.Release|Any CPU.Build.0 = Release|Any CPU
{83929B86-434B-4C24-9B02-1F944DF8D71C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83929B86-434B-4C24-9B02-1F944DF8D71C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83929B86-434B-4C24-9B02-1F944DF8D71C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83929B86-434B-4C24-9B02-1F944DF8D71C}.Release|Any CPU.Build.0 = Release|Any CPU
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}.Release|Any CPU.Build.0 = Release|Any CPU
{F958B682-5192-4287-BF80-CB7B30ECFC9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F958B682-5192-4287-BF80-CB7B30ECFC9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F958B682-5192-4287-BF80-CB7B30ECFC9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F958B682-5192-4287-BF80-CB7B30ECFC9E}.Release|Any CPU.Build.0 = Release|Any CPU
{F081EE15-7E1A-4E8C-B91F-5472ED565431}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F081EE15-7E1A-4E8C-B91F-5472ED565431}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F081EE15-7E1A-4E8C-B91F-5472ED565431}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F081EE15-7E1A-4E8C-B91F-5472ED565431}.Release|Any CPU.Build.0 = Release|Any CPU
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}.Release|Any CPU.Build.0 = Release|Any CPU
{6837DB22-1F5C-42E1-A466-E4597AF6E91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6837DB22-1F5C-42E1-A466-E4597AF6E91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6837DB22-1F5C-42E1-A466-E4597AF6E91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6837DB22-1F5C-42E1-A466-E4597AF6E91E}.Release|Any CPU.Build.0 = Release|Any CPU
{A4DF29BD-95CC-4A86-96EC-FB6692270E68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A4DF29BD-95CC-4A86-96EC-FB6692270E68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A4DF29BD-95CC-4A86-96EC-FB6692270E68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A4DF29BD-95CC-4A86-96EC-FB6692270E68}.Release|Any CPU.Build.0 = Release|Any CPU
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}.Release|Any CPU.Build.0 = Release|Any CPU
{EA3832C4-8079-4E84-AF8C-12744E4EFD44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA3832C4-8079-4E84-AF8C-12744E4EFD44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA3832C4-8079-4E84-AF8C-12744E4EFD44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA3832C4-8079-4E84-AF8C-12744E4EFD44}.Release|Any CPU.Build.0 = Release|Any CPU
{AEA00027-F280-43A4-AC60-E2AF3014CF34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEA00027-F280-43A4-AC60-E2AF3014CF34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEA00027-F280-43A4-AC60-E2AF3014CF34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEA00027-F280-43A4-AC60-E2AF3014CF34}.Release|Any CPU.Build.0 = Release|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{300EE2D5-54C5-46F2-AD03-BB43589EA074} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{3130C574-557C-4DA2-933E-AED7A9EBE48A} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{35F44BE9-13D0-417C-A01A-F0787BEE6DC3} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{B43B546E-23F3-46E8-ACB7-D04F05CDA180} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{C4939482-9447-47D1-B6AF-E9F8C6323841} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{5E5E1E84-DDBC-40D6-B891-0D563A15A44A} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{823F80B6-E241-43F7-83BD-29FBB58A77F9} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{79E85459-EF54-44D6-9508-1E68B8238D00} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{9C3C685E-3D7D-4638-A031-24F71CF74B52} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{18BE8F72-E528-4617-B1B1-07BD35337DFC} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
{01DC21DD-C6E2-4B21-864E-97D29448F777} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
{468E498C-59DB-4541-8D8A-0D89DE9083AB} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE} = {468E498C-59DB-4541-8D8A-0D89DE9083AB}
{0A3C36AB-2ACF-4175-A512-66B4C3DB9371} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{E7C689EB-5AD6-4E91-A007-6116EEA702FC} = {0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D}
{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{E20238CE-5C64-4F87-8753-3B4E1EC9A740} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{EBD49CCA-5400-4C36-B5DF-7B28190AA323} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{150EF356-E8BC-4922-91C2-362017479409} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{4CB34AB3-01C9-4911-8914-EABAA744EAD3} = {0A3C36AB-2ACF-4175-A512-66B4C3DB9371}
{FC47A50F-03B2-47D8-AAFB-075314FBA186} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5} = {FC47A50F-03B2-47D8-AAFB-075314FBA186}
{44E0B699-A140-4551-A0E9-9FD9F171A9C2} = {468E498C-59DB-4541-8D8A-0D89DE9083AB}
{E43FB9E7-7851-4880-B7EE-12B8CEE628D0} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1} = {E43FB9E7-7851-4880-B7EE-12B8CEE628D0}
{5583B236-794A-422C-B306-52BB7DFE7EBE} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{5837821B-CA71-40B6-A9F1-C25D318B4691} = {5583B236-794A-422C-B306-52BB7DFE7EBE}
{25015984-7F81-454C-AC6E-E6DC810A59E2} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{EDD20103-2089-48D7-A445-6FA8183CA376} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{F7181887-E6B5-4DA9-9598-8E9E806B5A20} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{115DEB38-679F-467E-8F87-9E669DFD2EB8} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{47EDFC14-BB99-44BF-A447-035D40D7347B} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A} = {47EDFC14-BB99-44BF-A447-035D40D7347B}
{FC656D28-1AA3-462D-9B18-A10436E47C08} = {47EDFC14-BB99-44BF-A447-035D40D7347B}
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{E42743A0-FBDD-4150-9D53-6000496D9B87} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{FC9F520F-BA51-4AD2-BFEE-EF787798E734} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{22E75696-6FE9-436A-9097-EE21C603F818} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{2EC02600-8367-4B25-8243-CA4E53FA00FA} = {22E75696-6FE9-436A-9097-EE21C603F818}
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD} = {22E75696-6FE9-436A-9097-EE21C603F818}
{AC6AA60A-393F-4D49-B3F1-44F567B18E22} = {22E75696-6FE9-436A-9097-EE21C603F818}
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A} = {22E75696-6FE9-436A-9097-EE21C603F818}
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049} = {22E75696-6FE9-436A-9097-EE21C603F818}
{795FF94C-F22C-45A3-9643-88EED173D6D4} = {22E75696-6FE9-436A-9097-EE21C603F818}
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{F5124847-D046-4458-A89D-CD796FEDEE1A} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{0B147307-64FF-4496-9DC9-8F83013AC045} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{935888CF-E871-42BB-A47D-5E1168269A03} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{EA1D7E39-D77D-4B13-BAD0-76BA30547019} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{823EB953-0B26-4D85-9B3F-14FCB476E987} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{83929B86-434B-4C24-9B02-1F944DF8D71C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{F958B682-5192-4287-BF80-CB7B30ECFC9E} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{F081EE15-7E1A-4E8C-B91F-5472ED565431} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{6837DB22-1F5C-42E1-A466-E4597AF6E91E} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{A4DF29BD-95CC-4A86-96EC-FB6692270E68} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{EA3832C4-8079-4E84-AF8C-12744E4EFD44} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{AEA00027-F280-43A4-AC60-E2AF3014CF34} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{E0090EF3-C4A7-4262-9300-1D395BE25DD0} = {22E75696-6FE9-436A-9097-EE21C603F818}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29509.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Core", "src\core\Elsa.Core\Elsa.Core.csproj", "{300EE2D5-54C5-46F2-AD03-BB43589EA074}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution", "solution", "{7165BB9E-F22C-40D2-B7B1-CA3EFA2529A0}"
ProjectSection(SolutionItems) = preProject
.dockerignore = .dockerignore
.editorconfig = .editorconfig
.gitignore = .gitignore
docker-compose.yaml = docker-compose.yaml
Dockerfile = Dockerfile
Nuget.Config = Nuget.Config
README.md = README.md
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Abstractions", "src\core\Elsa.Abstractions\Elsa.Abstractions.csproj", "{3130C574-557C-4DA2-933E-AED7A9EBE48A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{35F44BE9-13D0-417C-A01A-F0787BEE6DC3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Console", "src\activities\Elsa.Activities.Console\Elsa.Activities.Console.csproj", "{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Http", "src\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj", "{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "activities", "activities", "{B43B546E-23F3-46E8-ACB7-D04F05CDA180}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Email", "src\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj", "{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Timers", "src\activities\Elsa.Activities.Timers\Elsa.Activities.Timers.csproj", "{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.MassTransit", "src\activities\Elsa.Activities.MassTransit\Elsa.Activities.MassTransit.csproj", "{C4939482-9447-47D1-B6AF-E9F8C6323841}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{5E5E1E84-DDBC-40D6-B891-0D563A15A44A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.UserTask", "src\activities\Elsa.Activities.UserTask\Elsa.Activities.UserTask.csproj", "{823F80B6-E241-43F7-83BD-29FBB58A77F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Dropbox", "src\activities\Elsa.Activities.Dropbox\Elsa.Activities.Dropbox.csproj", "{79E85459-EF54-44D6-9508-1E68B8238D00}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripting", "scripting", "{9C3C685E-3D7D-4638-A031-24F71CF74B52}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa", "src\core\Elsa\Elsa.csproj", "{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.JavaScript", "src\scripting\Elsa.Scripting.JavaScript\Elsa.Scripting.JavaScript.csproj", "{18BE8F72-E528-4617-B1B1-07BD35337DFC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Scripting.Liquid", "src\scripting\Elsa.Scripting.Liquid\Elsa.Scripting.Liquid.csproj", "{01DC21DD-C6E2-4B21-864E-97D29448F777}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "server", "server", "{468E498C-59DB-4541-8D8A-0D89DE9083AB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.Host", "src\server\Elsa.Server.Host\Elsa.Server.Host.csproj", "{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{AB1AE008-6FD6-414C-8E88-D735F42E1FA6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{0A3C36AB-2ACF-4175-A512-66B4C3DB9371}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Testing.Shared", "test\shared\Elsa.Testing.Shared\Elsa.Testing.Shared.csproj", "{E7C689EB-5AD6-4E91-A007-6116EEA702FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.SqlServer", "src\providers\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj", "{150EF356-E8BC-4922-91C2-362017479409}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\providers\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{EBD49CCA-5400-4C36-B5DF-7B28190AA323}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.AzureBlob", "src\providers\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{E20238CE-5C64-4F87-8753-3B4E1EC9A740}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locking", "locking", "{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Core.IntegrationTests", "test\integration\Elsa.Core.IntegrationTests\Elsa.Core.IntegrationTests.csproj", "{4CB34AB3-01C9-4911-8914-EABAA744EAD3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "component", "component", "{FC47A50F-03B2-47D8-AAFB-075314FBA186}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ComponentTests", "test\component\Elsa.ComponentTests\Elsa.ComponentTests.csproj", "{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.Api", "src\server\Elsa.Server.Api\Elsa.Server.Api.csproj", "{44E0B699-A140-4551-A0E9-9FD9F171A9C2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{E43FB9E7-7851-4880-B7EE-12B8CEE628D0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Client", "src\clients\Elsa.Client\Elsa.Client.csproj", "{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "servicebus", "servicebus", "{47EDFC14-BB99-44BF-A447-035D40D7347B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Rebus.AzureServiceBus", "src\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj", "{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Rebus.RabbitMq", "src\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj", "{FC656D28-1AA3-462D-9B18-A10436E47C08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.AzureServiceBus", "src\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj", "{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{5619F343-A270-4E31-9C52-7C85A4DD6D71}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.InMemory", "src\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj", "{BA9EE5A2-632F-4489-B59D-C7283960BCCA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.YesSql", "src\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{7E14324E-7AD3-4498-AECE-C7B80FB691BC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.MongoDb", "src\persistence\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj", "{09718131-4D0E-4EF3-B3FB-116EBE1D8702}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "worker", "worker", "{E42743A0-FBDD-4150-9D53-6000496D9B87}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "console", "console", "{FC9F520F-BA51-4AD2-BFEE-EF787798E734}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnet", "aspnet", "{22E75696-6FE9-436A-9097-EE21C603F818}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ContextualWorkflowHttp", "src\samples\aspnet\Elsa.Samples.ContextualWorkflowHttp\Elsa.Samples.ContextualWorkflowHttp.csproj", "{2EC02600-8367-4B25-8243-CA4E53FA00FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CorrelationHttp", "src\samples\aspnet\Elsa.Samples.CorrelationHttp\Elsa.Samples.CorrelationHttp.csproj", "{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomActivities", "src\samples\aspnet\Elsa.Samples.CustomActivities\Elsa.Samples.CustomActivities.csproj", "{AC6AA60A-393F-4D49-B3F1-44F567B18E22}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForkJoinTimerAndSignalHttp", "src\samples\aspnet\Elsa.Samples.ForkJoinTimerAndSignalHttp\Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj", "{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldHttp", "src\samples\aspnet\Elsa.Samples.HelloWorldHttp\Elsa.Samples.HelloWorldHttp.csproj", "{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadModelHttp", "src\samples\aspnet\Elsa.Samples.ReadModelHttp\Elsa.Samples.ReadModelHttp.csproj", "{795FF94C-F22C-45A3-9643-88EED173D6D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DeclarativeCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.DeclarativeCompositeActivitiesConsole\Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj", "{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.FileBasedWorkflow", "src\samples\console\Elsa.Samples.FileBasedWorkflow\Elsa.Samples.FileBasedWorkflow.csproj", "{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForLoopConsole", "src\samples\console\Elsa.Samples.ForLoopConsole\Elsa.Samples.ForLoopConsole.csproj", "{F5124847-D046-4458-A89D-CD796FEDEE1A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.GoBackConsole", "src\samples\console\Elsa.Samples.GoBackConsole\Elsa.Samples.GoBackConsole.csproj", "{0B147307-64FF-4496-9DC9-8F83013AC045}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldConsole", "src\samples\console\Elsa.Samples.HelloWorldConsole\Elsa.Samples.HelloWorldConsole.csproj", "{935888CF-E871-42BB-A47D-5E1168269A03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.IfElseConsole", "src\samples\console\Elsa.Samples.IfElseConsole\Elsa.Samples.IfElseConsole.csproj", "{EA1D7E39-D77D-4B13-BAD0-76BA30547019}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ProgrammaticCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.ProgrammaticCompositeActivitiesConsole\Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj", "{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadLineEchoConsole", "src\samples\console\Elsa.Samples.ReadLineEchoConsole\Elsa.Samples.ReadLineEchoConsole.csproj", "{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Serialization", "src\samples\console\Elsa.Samples.Serialization\Elsa.Samples.Serialization.csproj", "{823EB953-0B26-4D85-9B3F-14FCB476E987}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.SignalingConsole", "src\samples\console\Elsa.Samples.SignalingConsole\Elsa.Samples.SignalingConsole.csproj", "{83929B86-434B-4C24-9B02-1F944DF8D71C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopConsole", "src\samples\console\Elsa.Samples.WhileLoopConsole\Elsa.Samples.WhileLoopConsole.csproj", "{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AzureServiceBusWorker", "src\samples\worker\Elsa.Samples.AzureServiceBusWorker\Elsa.Samples.AzureServiceBusWorker.csproj", "{F958B682-5192-4287-BF80-CB7B30ECFC9E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DistributedLock", "src\samples\worker\Elsa.Samples.DistributedLock\Elsa.Samples.DistributedLock.csproj", "{F081EE15-7E1A-4E8C-B91F-5472ED565431}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.MultiTenantChildWorker", "src\samples\worker\Elsa.Samples.MultiTenantChildWorker\Elsa.Samples.MultiTenantChildWorker.csproj", "{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RebusWorker", "src\samples\worker\Elsa.Samples.RebusWorker\Elsa.Samples.RebusWorker.csproj", "{6837DB22-1F5C-42E1-A466-E4597AF6E91E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RunChildWorkflowWorker", "src\samples\worker\Elsa.Samples.RunChildWorkflowWorker\Elsa.Samples.RunChildWorkflowWorker.csproj", "{A4DF29BD-95CC-4A86-96EC-FB6692270E68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers", "src\samples\worker\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopWorker", "src\samples\worker\Elsa.Samples.WhileLoopWorker\Elsa.Samples.WhileLoopWorker.csproj", "{EA3832C4-8079-4E84-AF8C-12744E4EFD44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomAttributesChildWorker", "src\samples\worker\Elsa.Samples.CustomAttributesChildWorker\Elsa.Samples.CustomAttributesChildWorker.csproj", "{AEA00027-F280-43A4-AC60-E2AF3014CF34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Interrupts", "src\samples\aspnet\Elsa.Samples.Interrupts\Elsa.Samples.Interrupts.csproj", "{E0090EF3-C4A7-4262-9300-1D395BE25DD0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Debug|Any CPU.Build.0 = Debug|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.ActiveCfg = Release|Any CPU
{300EE2D5-54C5-46F2-AD03-BB43589EA074}.Release|Any CPU.Build.0 = Release|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3130C574-557C-4DA2-933E-AED7A9EBE48A}.Release|Any CPU.Build.0 = Release|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F}.Release|Any CPU.Build.0 = Release|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703}.Release|Any CPU.Build.0 = Release|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30}.Release|Any CPU.Build.0 = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D}.Release|Any CPU.Build.0 = Release|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4939482-9447-47D1-B6AF-E9F8C6323841}.Release|Any CPU.Build.0 = Release|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{823F80B6-E241-43F7-83BD-29FBB58A77F9}.Release|Any CPU.Build.0 = Release|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79E85459-EF54-44D6-9508-1E68B8238D00}.Release|Any CPU.Build.0 = Release|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B}.Release|Any CPU.Build.0 = Release|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{18BE8F72-E528-4617-B1B1-07BD35337DFC}.Release|Any CPU.Build.0 = Release|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Debug|Any CPU.Build.0 = Debug|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.ActiveCfg = Release|Any CPU
{01DC21DD-C6E2-4B21-864E-97D29448F777}.Release|Any CPU.Build.0 = Release|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE}.Release|Any CPU.Build.0 = Release|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7C689EB-5AD6-4E91-A007-6116EEA702FC}.Release|Any CPU.Build.0 = Release|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Debug|Any CPU.Build.0 = Debug|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Release|Any CPU.ActiveCfg = Release|Any CPU
{150EF356-E8BC-4922-91C2-362017479409}.Release|Any CPU.Build.0 = Release|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBD49CCA-5400-4C36-B5DF-7B28190AA323}.Release|Any CPU.Build.0 = Release|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.Build.0 = Release|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Release|Any CPU.Build.0 = Release|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}.Release|Any CPU.Build.0 = Release|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44E0B699-A140-4551-A0E9-9FD9F171A9C2}.Release|Any CPU.Build.0 = Release|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}.Release|Any CPU.Build.0 = Release|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{25015984-7F81-454C-AC6E-E6DC810A59E2}.Release|Any CPU.Build.0 = Release|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}.Release|Any CPU.Build.0 = Release|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Debug|Any CPU.Build.0 = Debug|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Release|Any CPU.ActiveCfg = Release|Any CPU
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}.Release|Any CPU.Build.0 = Release|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDD20103-2089-48D7-A445-6FA8183CA376}.Release|Any CPU.Build.0 = Release|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}.Release|Any CPU.Build.0 = Release|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7181887-E6B5-4DA9-9598-8E9E806B5A20}.Release|Any CPU.Build.0 = Release|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{115DEB38-679F-467E-8F87-9E669DFD2EB8}.Release|Any CPU.Build.0 = Release|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}.Release|Any CPU.Build.0 = Release|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC656D28-1AA3-462D-9B18-A10436E47C08}.Release|Any CPU.Build.0 = Release|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}.Release|Any CPU.Build.0 = Release|Any CPU
{BA9EE5A2-632F-4489-B59D-C7283960BCCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA9EE5A2-632F-4489-B59D-C7283960BCCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA9EE5A2-632F-4489-B59D-C7283960BCCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA9EE5A2-632F-4489-B59D-C7283960BCCA}.Release|Any CPU.Build.0 = Release|Any CPU
{7E14324E-7AD3-4498-AECE-C7B80FB691BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E14324E-7AD3-4498-AECE-C7B80FB691BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E14324E-7AD3-4498-AECE-C7B80FB691BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E14324E-7AD3-4498-AECE-C7B80FB691BC}.Release|Any CPU.Build.0 = Release|Any CPU
{09718131-4D0E-4EF3-B3FB-116EBE1D8702}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{09718131-4D0E-4EF3-B3FB-116EBE1D8702}.Debug|Any CPU.Build.0 = Debug|Any CPU
{09718131-4D0E-4EF3-B3FB-116EBE1D8702}.Release|Any CPU.ActiveCfg = Release|Any CPU
{09718131-4D0E-4EF3-B3FB-116EBE1D8702}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{300EE2D5-54C5-46F2-AD03-BB43589EA074} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{3130C574-557C-4DA2-933E-AED7A9EBE48A} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{35F44BE9-13D0-417C-A01A-F0787BEE6DC3} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{B98B80CB-D3A3-437C-A61C-ED82C8C77B2F} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{1D63E1B4-2386-4BEC-9090-C3F3CBF25703} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{B43B546E-23F3-46E8-ACB7-D04F05CDA180} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{D20FCB88-9DCA-49EA-9CC2-5B94DD935D30} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{E4B71DC4-3E73-49C3-9B4E-CA13909F222D} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{C4939482-9447-47D1-B6AF-E9F8C6323841} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{5E5E1E84-DDBC-40D6-B891-0D563A15A44A} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{823F80B6-E241-43F7-83BD-29FBB58A77F9} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{79E85459-EF54-44D6-9508-1E68B8238D00} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{9C3C685E-3D7D-4638-A031-24F71CF74B52} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{6BB5EB72-AD9A-41ED-A6AA-0FF1093EA41B} = {35F44BE9-13D0-417C-A01A-F0787BEE6DC3}
{18BE8F72-E528-4617-B1B1-07BD35337DFC} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
{01DC21DD-C6E2-4B21-864E-97D29448F777} = {9C3C685E-3D7D-4638-A031-24F71CF74B52}
{468E498C-59DB-4541-8D8A-0D89DE9083AB} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{FC54EDBA-71FB-4A87-8FD5-54759DF77CCE} = {468E498C-59DB-4541-8D8A-0D89DE9083AB}
{0A3C36AB-2ACF-4175-A512-66B4C3DB9371} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{E7C689EB-5AD6-4E91-A007-6116EEA702FC} = {0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D}
{150EF356-E8BC-4922-91C2-362017479409} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{EBD49CCA-5400-4C36-B5DF-7B28190AA323} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{E20238CE-5C64-4F87-8753-3B4E1EC9A740} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{4CB34AB3-01C9-4911-8914-EABAA744EAD3} = {0A3C36AB-2ACF-4175-A512-66B4C3DB9371}
{FC47A50F-03B2-47D8-AAFB-075314FBA186} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5} = {FC47A50F-03B2-47D8-AAFB-075314FBA186}
{44E0B699-A140-4551-A0E9-9FD9F171A9C2} = {468E498C-59DB-4541-8D8A-0D89DE9083AB}
{E43FB9E7-7851-4880-B7EE-12B8CEE628D0} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{2DA042D6-1E3C-4B15-B48E-BF45426C74E1} = {E43FB9E7-7851-4880-B7EE-12B8CEE628D0}
{5583B236-794A-422C-B306-52BB7DFE7EBE} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{5837821B-CA71-40B6-A9F1-C25D318B4691} = {5583B236-794A-422C-B306-52BB7DFE7EBE}
{25015984-7F81-454C-AC6E-E6DC810A59E2} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{04FD384F-1B78-4D4C-9815-F9FBDA1B9245} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{EDD20103-2089-48D7-A445-6FA8183CA376} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{F7181887-E6B5-4DA9-9598-8E9E806B5A20} = {5837821B-CA71-40B6-A9F1-C25D318B4691}
{115DEB38-679F-467E-8F87-9E669DFD2EB8} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{47EDFC14-BB99-44BF-A447-035D40D7347B} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{D3440E66-A871-4AB0-A1E0-8B3864ACA16A} = {47EDFC14-BB99-44BF-A447-035D40D7347B}
{FC656D28-1AA3-462D-9B18-A10436E47C08} = {47EDFC14-BB99-44BF-A447-035D40D7347B}
{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{E42743A0-FBDD-4150-9D53-6000496D9B87} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{FC9F520F-BA51-4AD2-BFEE-EF787798E734} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{22E75696-6FE9-436A-9097-EE21C603F818} = {5E5E1E84-DDBC-40D6-B891-0D563A15A44A}
{2EC02600-8367-4B25-8243-CA4E53FA00FA} = {22E75696-6FE9-436A-9097-EE21C603F818}
{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD} = {22E75696-6FE9-436A-9097-EE21C603F818}
{AC6AA60A-393F-4D49-B3F1-44F567B18E22} = {22E75696-6FE9-436A-9097-EE21C603F818}
{8BB1B34D-E0FC-4804-9098-E7F8E35A749A} = {22E75696-6FE9-436A-9097-EE21C603F818}
{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049} = {22E75696-6FE9-436A-9097-EE21C603F818}
{795FF94C-F22C-45A3-9643-88EED173D6D4} = {22E75696-6FE9-436A-9097-EE21C603F818}
{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{F5124847-D046-4458-A89D-CD796FEDEE1A} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{0B147307-64FF-4496-9DC9-8F83013AC045} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{935888CF-E871-42BB-A47D-5E1168269A03} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{EA1D7E39-D77D-4B13-BAD0-76BA30547019} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{823EB953-0B26-4D85-9B3F-14FCB476E987} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{83929B86-434B-4C24-9B02-1F944DF8D71C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
{F958B682-5192-4287-BF80-CB7B30ECFC9E} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{F081EE15-7E1A-4E8C-B91F-5472ED565431} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{1053BF2D-BCB6-4616-9773-7FF25F48ECA3} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{6837DB22-1F5C-42E1-A466-E4597AF6E91E} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{A4DF29BD-95CC-4A86-96EC-FB6692270E68} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{EA3832C4-8079-4E84-AF8C-12744E4EFD44} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{AEA00027-F280-43A4-AC60-E2AF3014CF34} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{E0090EF3-C4A7-4262-9300-1D395BE25DD0} = {22E75696-6FE9-436A-9097-EE21C603F818}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}
EndGlobalSection
EndGlobal

View file

@ -118,7 +118,13 @@ This models is then serialized to JSON and deserialized back into the model
```csharp
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa(option => option.UsePersistence(db => db.UseSqLite("Data Source=elsa.db;Cache=Shared", IsolationLevel.ReadUncommitted)))
.AddElsa()
// For tests
.AddElsaPersistenceInMemory()
// For productive use
.AddElsaPersistenceYesSql((sp, config) => config.UseSqLite("Data Source=elsa.db;Cache=Shared", IsolationLevel.ReadUncommitted))
.AddConsoleActivities()
.BuildServiceProvider();

View file

@ -64,47 +64,47 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Sql
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\providers\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{EBD49CCA-5400-4C36-B5DF-7B28190AA323}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.AzureBlob", "src\providers\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{E20238CE-5C64-4F87-8753-3B4E1EC9A740}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.AzureBlob", "src\providers\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{E20238CE-5C64-4F87-8753-3B4E1EC9A740}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locking", "locking", "{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Core.IntegrationTests", "test\integration\Elsa.Core.IntegrationTests\Elsa.Core.IntegrationTests.csproj", "{4CB34AB3-01C9-4911-8914-EABAA744EAD3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Core.IntegrationTests", "test\integration\Elsa.Core.IntegrationTests\Elsa.Core.IntegrationTests.csproj", "{4CB34AB3-01C9-4911-8914-EABAA744EAD3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "component", "component", "{FC47A50F-03B2-47D8-AAFB-075314FBA186}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.ComponentTests", "test\component\Elsa.ComponentTests\Elsa.ComponentTests.csproj", "{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.ComponentTests", "test\component\Elsa.ComponentTests\Elsa.ComponentTests.csproj", "{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Server.Api", "src\server\Elsa.Server.Api\Elsa.Server.Api.csproj", "{44E0B699-A140-4551-A0E9-9FD9F171A9C2}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Server.Api", "src\server\Elsa.Server.Api\Elsa.Server.Api.csproj", "{44E0B699-A140-4551-A0E9-9FD9F171A9C2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "clients", "clients", "{E43FB9E7-7851-4880-B7EE-12B8CEE628D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Client", "src\clients\Elsa.Client\Elsa.Client.csproj", "{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Client", "src\clients\Elsa.Client\Elsa.Client.csproj", "{2DA042D6-1E3C-4B15-B48E-BF45426C74E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dashboards", "dashboards", "{5583B236-794A-422C-B306-52BB7DFE7EBE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{5837821B-CA71-40B6-A9F1-C25D318B4691}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Backend", "src\dashboards\blazor\ElsaDashboard.Backend\ElsaDashboard.Backend.csproj", "{25015984-7F81-454C-AC6E-E6DC810A59E2}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Backend", "src\dashboards\blazor\ElsaDashboard.Backend\ElsaDashboard.Backend.csproj", "{25015984-7F81-454C-AC6E-E6DC810A59E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Shared", "src\dashboards\blazor\ElsaDashboard.Shared\ElsaDashboard.Shared.csproj", "{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Shared", "src\dashboards\blazor\ElsaDashboard.Shared\ElsaDashboard.Shared.csproj", "{DC9B6EEA-E692-4AF7-9A5A-870FAC4B5EB2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.WebAssembly", "src\dashboards\blazor\ElsaDashboard.WebAssembly\ElsaDashboard.WebAssembly.csproj", "{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.WebAssembly", "src\dashboards\blazor\ElsaDashboard.WebAssembly\ElsaDashboard.WebAssembly.csproj", "{04FD384F-1B78-4D4C-9815-F9FBDA1B9245}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application", "src\dashboards\blazor\ElsaDashboard.Application\ElsaDashboard.Application.csproj", "{EDD20103-2089-48D7-A445-6FA8183CA376}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Application", "src\dashboards\blazor\ElsaDashboard.Application\ElsaDashboard.Application.csproj", "{EDD20103-2089-48D7-A445-6FA8183CA376}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application.Server", "src\dashboards\blazor\ElsaDashboard.Application.Server\ElsaDashboard.Application.Server.csproj", "{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Application.Server", "src\dashboards\blazor\ElsaDashboard.Application.Server\ElsaDashboard.Application.Server.csproj", "{8DD4F1E8-8AC8-4AB4-AC08-9456AA6EAF10}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElsaDashboard.Application.WebAssembly", "src\dashboards\blazor\ElsaDashboard.Application.WebAssembly\ElsaDashboard.Application.WebAssembly.csproj", "{F7181887-E6B5-4DA9-9598-8E9E806B5A20}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Application.WebAssembly", "src\dashboards\blazor\ElsaDashboard.Application.WebAssembly\ElsaDashboard.Application.WebAssembly.csproj", "{F7181887-E6B5-4DA9-9598-8E9E806B5A20}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.Rebus", "src\activities\Elsa.Activities.Rebus\Elsa.Activities.Rebus.csproj", "{115DEB38-679F-467E-8F87-9E669DFD2EB8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.Rebus", "src\activities\Elsa.Activities.Rebus\Elsa.Activities.Rebus.csproj", "{115DEB38-679F-467E-8F87-9E669DFD2EB8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "servicebus", "servicebus", "{47EDFC14-BB99-44BF-A447-035D40D7347B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Rebus.AzureServiceBus", "src\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj", "{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Rebus.AzureServiceBus", "src\servicebus\Elsa.Rebus.AzureServiceBus\Elsa.Rebus.AzureServiceBus.csproj", "{D3440E66-A871-4AB0-A1E0-8B3864ACA16A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Rebus.RabbitMq", "src\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj", "{FC656D28-1AA3-462D-9B18-A10436E47C08}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Rebus.RabbitMq", "src\servicebus\Elsa.Rebus.RabbitMq\Elsa.Rebus.RabbitMq.csproj", "{FC656D28-1AA3-462D-9B18-A10436E47C08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Activities.AzureServiceBus", "src\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj", "{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.AzureServiceBus", "src\activities\Elsa.Activities.AzureServiceBus\Elsa.Activities.AzureServiceBus.csproj", "{DD607BC1-F9D9-4685-BC8F-A4056C2C31FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "worker", "worker", "{E42743A0-FBDD-4150-9D53-6000496D9B87}"
EndProject
@ -112,57 +112,65 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "console", "console", "{FC9F
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspnet", "aspnet", "{22E75696-6FE9-436A-9097-EE21C603F818}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ContextualWorkflowHttp", "src\samples\aspnet\Elsa.Samples.ContextualWorkflowHttp\Elsa.Samples.ContextualWorkflowHttp.csproj", "{2EC02600-8367-4B25-8243-CA4E53FA00FA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ContextualWorkflowHttp", "src\samples\aspnet\Elsa.Samples.ContextualWorkflowHttp\Elsa.Samples.ContextualWorkflowHttp.csproj", "{2EC02600-8367-4B25-8243-CA4E53FA00FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CorrelationHttp", "src\samples\aspnet\Elsa.Samples.CorrelationHttp\Elsa.Samples.CorrelationHttp.csproj", "{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.CorrelationHttp", "src\samples\aspnet\Elsa.Samples.CorrelationHttp\Elsa.Samples.CorrelationHttp.csproj", "{3BDA353A-660E-47FA-95F5-4F6BB8E6B8AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomActivities", "src\samples\aspnet\Elsa.Samples.CustomActivities\Elsa.Samples.CustomActivities.csproj", "{AC6AA60A-393F-4D49-B3F1-44F567B18E22}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.CustomActivities", "src\samples\aspnet\Elsa.Samples.CustomActivities\Elsa.Samples.CustomActivities.csproj", "{AC6AA60A-393F-4D49-B3F1-44F567B18E22}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForkJoinTimerAndSignalHttp", "src\samples\aspnet\Elsa.Samples.ForkJoinTimerAndSignalHttp\Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj", "{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ForkJoinTimerAndSignalHttp", "src\samples\aspnet\Elsa.Samples.ForkJoinTimerAndSignalHttp\Elsa.Samples.ForkJoinTimerAndSignalHttp.csproj", "{8BB1B34D-E0FC-4804-9098-E7F8E35A749A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldHttp", "src\samples\aspnet\Elsa.Samples.HelloWorldHttp\Elsa.Samples.HelloWorldHttp.csproj", "{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.HelloWorldHttp", "src\samples\aspnet\Elsa.Samples.HelloWorldHttp\Elsa.Samples.HelloWorldHttp.csproj", "{15FDEF59-32F8-4F8F-AE10-B3D0FEE03049}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadModelHttp", "src\samples\aspnet\Elsa.Samples.ReadModelHttp\Elsa.Samples.ReadModelHttp.csproj", "{795FF94C-F22C-45A3-9643-88EED173D6D4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ReadModelHttp", "src\samples\aspnet\Elsa.Samples.ReadModelHttp\Elsa.Samples.ReadModelHttp.csproj", "{795FF94C-F22C-45A3-9643-88EED173D6D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DeclarativeCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.DeclarativeCompositeActivitiesConsole\Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj", "{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.DeclarativeCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.DeclarativeCompositeActivitiesConsole\Elsa.Samples.DeclarativeCompositeActivitiesConsole.csproj", "{7EC9B4E1-820E-4D53-B4E2-9815E31C7AE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.FileBasedWorkflow", "src\samples\console\Elsa.Samples.FileBasedWorkflow\Elsa.Samples.FileBasedWorkflow.csproj", "{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.FileBasedWorkflow", "src\samples\console\Elsa.Samples.FileBasedWorkflow\Elsa.Samples.FileBasedWorkflow.csproj", "{C6A54F89-271D-402E-A38D-6C3A9DB7DF9C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ForLoopConsole", "src\samples\console\Elsa.Samples.ForLoopConsole\Elsa.Samples.ForLoopConsole.csproj", "{F5124847-D046-4458-A89D-CD796FEDEE1A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ForLoopConsole", "src\samples\console\Elsa.Samples.ForLoopConsole\Elsa.Samples.ForLoopConsole.csproj", "{F5124847-D046-4458-A89D-CD796FEDEE1A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.GoBackConsole", "src\samples\console\Elsa.Samples.GoBackConsole\Elsa.Samples.GoBackConsole.csproj", "{0B147307-64FF-4496-9DC9-8F83013AC045}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.GoBackConsole", "src\samples\console\Elsa.Samples.GoBackConsole\Elsa.Samples.GoBackConsole.csproj", "{0B147307-64FF-4496-9DC9-8F83013AC045}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.HelloWorldConsole", "src\samples\console\Elsa.Samples.HelloWorldConsole\Elsa.Samples.HelloWorldConsole.csproj", "{935888CF-E871-42BB-A47D-5E1168269A03}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.HelloWorldConsole", "src\samples\console\Elsa.Samples.HelloWorldConsole\Elsa.Samples.HelloWorldConsole.csproj", "{935888CF-E871-42BB-A47D-5E1168269A03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.IfElseConsole", "src\samples\console\Elsa.Samples.IfElseConsole\Elsa.Samples.IfElseConsole.csproj", "{EA1D7E39-D77D-4B13-BAD0-76BA30547019}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.IfElseConsole", "src\samples\console\Elsa.Samples.IfElseConsole\Elsa.Samples.IfElseConsole.csproj", "{EA1D7E39-D77D-4B13-BAD0-76BA30547019}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ProgrammaticCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.ProgrammaticCompositeActivitiesConsole\Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj", "{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ProgrammaticCompositeActivitiesConsole", "src\samples\console\Elsa.Samples.ProgrammaticCompositeActivitiesConsole\Elsa.Samples.ProgrammaticCompositeActivitiesConsole.csproj", "{0FC36CEC-35B3-4EB7-9DD7-0F2A1C4E9313}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadLineEchoConsole", "src\samples\console\Elsa.Samples.ReadLineEchoConsole\Elsa.Samples.ReadLineEchoConsole.csproj", "{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.ReadLineEchoConsole", "src\samples\console\Elsa.Samples.ReadLineEchoConsole\Elsa.Samples.ReadLineEchoConsole.csproj", "{E7BAECCC-CBF8-4975-93C4-6D3A8F94B000}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Serialization", "src\samples\console\Elsa.Samples.Serialization\Elsa.Samples.Serialization.csproj", "{823EB953-0B26-4D85-9B3F-14FCB476E987}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.Serialization", "src\samples\console\Elsa.Samples.Serialization\Elsa.Samples.Serialization.csproj", "{823EB953-0B26-4D85-9B3F-14FCB476E987}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.SignalingConsole", "src\samples\console\Elsa.Samples.SignalingConsole\Elsa.Samples.SignalingConsole.csproj", "{83929B86-434B-4C24-9B02-1F944DF8D71C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.SignalingConsole", "src\samples\console\Elsa.Samples.SignalingConsole\Elsa.Samples.SignalingConsole.csproj", "{83929B86-434B-4C24-9B02-1F944DF8D71C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopConsole", "src\samples\console\Elsa.Samples.WhileLoopConsole\Elsa.Samples.WhileLoopConsole.csproj", "{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.WhileLoopConsole", "src\samples\console\Elsa.Samples.WhileLoopConsole\Elsa.Samples.WhileLoopConsole.csproj", "{EDE80D8C-4C1F-44A3-8D0E-6D0757439E1C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.AzureServiceBusWorker", "src\samples\worker\Elsa.Samples.AzureServiceBusWorker\Elsa.Samples.AzureServiceBusWorker.csproj", "{F958B682-5192-4287-BF80-CB7B30ECFC9E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.AzureServiceBusWorker", "src\samples\worker\Elsa.Samples.AzureServiceBusWorker\Elsa.Samples.AzureServiceBusWorker.csproj", "{F958B682-5192-4287-BF80-CB7B30ECFC9E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.DistributedLock", "src\samples\worker\Elsa.Samples.DistributedLock\Elsa.Samples.DistributedLock.csproj", "{F081EE15-7E1A-4E8C-B91F-5472ED565431}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.DistributedLock", "src\samples\worker\Elsa.Samples.DistributedLock\Elsa.Samples.DistributedLock.csproj", "{F081EE15-7E1A-4E8C-B91F-5472ED565431}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.MultiTenantChildWorker", "src\samples\worker\Elsa.Samples.MultiTenantChildWorker\Elsa.Samples.MultiTenantChildWorker.csproj", "{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.MultiTenantChildWorker", "src\samples\worker\Elsa.Samples.MultiTenantChildWorker\Elsa.Samples.MultiTenantChildWorker.csproj", "{1053BF2D-BCB6-4616-9773-7FF25F48ECA3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RebusWorker", "src\samples\worker\Elsa.Samples.RebusWorker\Elsa.Samples.RebusWorker.csproj", "{6837DB22-1F5C-42E1-A466-E4597AF6E91E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.RebusWorker", "src\samples\worker\Elsa.Samples.RebusWorker\Elsa.Samples.RebusWorker.csproj", "{6837DB22-1F5C-42E1-A466-E4597AF6E91E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.RunChildWorkflowWorker", "src\samples\worker\Elsa.Samples.RunChildWorkflowWorker\Elsa.Samples.RunChildWorkflowWorker.csproj", "{A4DF29BD-95CC-4A86-96EC-FB6692270E68}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.RunChildWorkflowWorker", "src\samples\worker\Elsa.Samples.RunChildWorkflowWorker\Elsa.Samples.RunChildWorkflowWorker.csproj", "{A4DF29BD-95CC-4A86-96EC-FB6692270E68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Timers", "src\samples\worker\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.Timers", "src\samples\worker\Elsa.Samples.Timers\Elsa.Samples.Timers.csproj", "{FD2D1BD0-1229-4DCF-BE70-6BFD396DD489}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WhileLoopWorker", "src\samples\worker\Elsa.Samples.WhileLoopWorker\Elsa.Samples.WhileLoopWorker.csproj", "{EA3832C4-8079-4E84-AF8C-12744E4EFD44}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.WhileLoopWorker", "src\samples\worker\Elsa.Samples.WhileLoopWorker\Elsa.Samples.WhileLoopWorker.csproj", "{EA3832C4-8079-4E84-AF8C-12744E4EFD44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.CustomAttributesChildWorker", "src\samples\worker\Elsa.Samples.CustomAttributesChildWorker\Elsa.Samples.CustomAttributesChildWorker.csproj", "{AEA00027-F280-43A4-AC60-E2AF3014CF34}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.CustomAttributesChildWorker", "src\samples\worker\Elsa.Samples.CustomAttributesChildWorker\Elsa.Samples.CustomAttributesChildWorker.csproj", "{AEA00027-F280-43A4-AC60-E2AF3014CF34}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Interrupts", "src\samples\aspnet\Elsa.Samples.Interrupts\Elsa.Samples.Interrupts.csproj", "{E0090EF3-C4A7-4262-9300-1D395BE25DD0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.Interrupts", "src\samples\aspnet\Elsa.Samples.Interrupts\Elsa.Samples.Interrupts.csproj", "{E0090EF3-C4A7-4262-9300-1D395BE25DD0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "persistence", "persistence", "{69AE8FC9-D851-42E7-AB27-672F2147C1E3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.YesSql", "src\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj", "{A49EEF61-95EA-4620-8C18-336FC2576A72}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Persistence.InMemory", "src\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj", "{C1E1FA38-5284-44A5-9D69-4F42293B7EA0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Persistence.MongoDb", "src\persistence\Elsa.Persistence.MongoDb\Elsa.Persistence.MongoDb.csproj", "{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -238,7 +246,6 @@ Global
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E20238CE-5C64-4F87-8753-3B4E1EC9A740}.Release|Any CPU.Build.0 = Release|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4CB34AB3-01C9-4911-8914-EABAA744EAD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -399,6 +406,18 @@ Global
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0090EF3-C4A7-4262-9300-1D395BE25DD0}.Release|Any CPU.Build.0 = Release|Any CPU
{A49EEF61-95EA-4620-8C18-336FC2576A72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A49EEF61-95EA-4620-8C18-336FC2576A72}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A49EEF61-95EA-4620-8C18-336FC2576A72}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A49EEF61-95EA-4620-8C18-336FC2576A72}.Release|Any CPU.Build.0 = Release|Any CPU
{C1E1FA38-5284-44A5-9D69-4F42293B7EA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1E1FA38-5284-44A5-9D69-4F42293B7EA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1E1FA38-5284-44A5-9D69-4F42293B7EA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1E1FA38-5284-44A5-9D69-4F42293B7EA0}.Release|Any CPU.Build.0 = Release|Any CPU
{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -425,10 +444,10 @@ Global
{0A3C36AB-2ACF-4175-A512-66B4C3DB9371} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{E7C689EB-5AD6-4E91-A007-6116EEA702FC} = {0A6747EA-7AC6-4B6F-BC0C-C40C8A80C44D}
{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{E20238CE-5C64-4F87-8753-3B4E1EC9A740} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{EBD49CCA-5400-4C36-B5DF-7B28190AA323} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{150EF356-E8BC-4922-91C2-362017479409} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{EBD49CCA-5400-4C36-B5DF-7B28190AA323} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{E20238CE-5C64-4F87-8753-3B4E1EC9A740} = {7CD5C8D5-EC78-4A99-A514-F01CA7197AC8}
{7CD5C8D5-EC78-4A99-A514-F01CA7197AC8} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{4CB34AB3-01C9-4911-8914-EABAA744EAD3} = {0A3C36AB-2ACF-4175-A512-66B4C3DB9371}
{FC47A50F-03B2-47D8-AAFB-075314FBA186} = {AB1AE008-6FD6-414C-8E88-D735F42E1FA6}
{BB5819C7-434A-4AC5-8B0E-6C4FA672EBD5} = {FC47A50F-03B2-47D8-AAFB-075314FBA186}
@ -477,6 +496,10 @@ Global
{EA3832C4-8079-4E84-AF8C-12744E4EFD44} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{AEA00027-F280-43A4-AC60-E2AF3014CF34} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{E0090EF3-C4A7-4262-9300-1D395BE25DD0} = {22E75696-6FE9-436A-9097-EE21C603F818}
{69AE8FC9-D851-42E7-AB27-672F2147C1E3} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925}
{A49EEF61-95EA-4620-8C18-336FC2576A72} = {69AE8FC9-D851-42E7-AB27-672F2147C1E3}
{C1E1FA38-5284-44A5-9D69-4F42293B7EA0} = {69AE8FC9-D851-42E7-AB27-672F2147C1E3}
{402EE264-5447-42B3-B9C8-A2AAC7E6B1B9} = {69AE8FC9-D851-42E7-AB27-672F2147C1E3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}

View file

@ -2,7 +2,7 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Http.Models;
using Elsa.Activities.Http.Services;
using Elsa.Extensions;
using Elsa.Repositories;
using Elsa.Services;
using Microsoft.AspNetCore.Mvc;
@ -14,16 +14,16 @@ namespace Elsa.Activities.Http.Controllers
{
private readonly ITokenService _tokenService;
private readonly IWorkflowRunner _workflowRunner;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
public HttpWorkflowsController(
ITokenService tokenService,
IWorkflowRunner workflowRunner,
IWorkflowInstanceManager workflowInstanceManager)
IWorkflowInstanceRepository workflowInstanceRepository)
{
_tokenService = tokenService;
_workflowRunner = workflowRunner;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
}
[Route("trigger/{token}")]

View file

@ -3,7 +3,7 @@ using System.Net;
using System.Threading.Tasks;
using Elsa.Activities.Http.Extensions;
using Elsa.Activities.Http.Triggers;
using Elsa.Extensions;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Triggers;
using Microsoft.AspNetCore.Http;
@ -20,7 +20,7 @@ namespace Elsa.Activities.Http.Middleware
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext, IWorkflowSelector workflowSelector, IWorkflowRunner workflowRunner, IWorkflowInstanceManager workflowInstanceManager)
public async Task InvokeAsync(HttpContext httpContext, IWorkflowSelector workflowSelector, IWorkflowRunner workflowRunner, IWorkflowInstanceRepository workflowInstanceRepository)
{
var path = httpContext.Request.Path;
var method = httpContext.Request.Method;
@ -53,7 +53,7 @@ namespace Elsa.Activities.Http.Middleware
}
else
{
var workflowInstance = await workflowInstanceManager.GetByIdAsync(result.WorkflowInstanceId, cancellationToken);
var workflowInstance = await workflowInstanceRepository.GetByIdAsync(result.WorkflowInstanceId, cancellationToken);
if (workflowInstance == null)
{

View file

@ -5,6 +5,7 @@ using Elsa.Activities.Http.RequestHandlers.Results;
using Elsa.Activities.Http.Services;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
using Microsoft.AspNetCore.Http;
@ -13,19 +14,19 @@ namespace Elsa.Activities.Http.RequestHandlers.Handlers
public class SignalRequestHandler : IRequestHandler
{
private readonly HttpContext _httpContext;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly ITokenService _tokenService;
private readonly CancellationToken _cancellationToken;
private readonly IWorkflowRunner _workflowRunner;
public SignalRequestHandler(
IWorkflowInstanceManager workflowInstanceManager,
IWorkflowInstanceRepository workflowInstanceRepository,
IHttpContextAccessor httpContextAccessor,
ITokenService tokenService,
IWorkflowRunner workflowRunner)
{
_httpContext = httpContextAccessor.HttpContext;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_tokenService = tokenService;
_workflowRunner = workflowRunner;
_cancellationToken = _httpContext.RequestAborted;

View file

@ -2,6 +2,7 @@ using System.Threading.Tasks;
using Elsa.Activities.Timers.Services;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
using NodaTime;
@ -17,13 +18,13 @@ namespace Elsa.Activities.Timers
public class Cron : Activity
{
private readonly IClock _clock;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly IWorkflowScheduler _workflowScheduler;
public Cron(IClock clock, IWorkflowInstanceManager workflowInstanceManager, IWorkflowScheduler workflowScheduler)
public Cron(IClock clock, IWorkflowInstanceRepository workflowInstanceRepository, IWorkflowScheduler workflowScheduler)
{
_clock = clock;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_workflowScheduler = workflowScheduler;
}

View file

@ -2,6 +2,7 @@ using System.Threading.Tasks;
using Elsa.Activities.Timers.Services;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
using NodaTime;
@ -18,12 +19,12 @@ namespace Elsa.Activities.Timers
)]
public class StartAt : Activity
{
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly IWorkflowScheduler _workflowScheduler;
public StartAt(IWorkflowInstanceManager workflowInstanceManager, IWorkflowScheduler workflowScheduler)
public StartAt(IWorkflowInstanceRepository workflowInstanceRepository, IWorkflowScheduler workflowScheduler)
{
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_workflowScheduler = workflowScheduler;
}

View file

@ -1,8 +1,9 @@
using System.Threading;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Activities.Timers.Services;
using Elsa.ActivityResults;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
using NodaTime;
@ -21,9 +22,9 @@ namespace Elsa.Activities.Timers.ActivityResults
public override async ValueTask ExecuteAsync(ActivityExecutionContext activityExecutionContext, CancellationToken cancellationToken)
{
var workflowInstance = activityExecutionContext.WorkflowExecutionContext.WorkflowInstance;
var workflowInstanceManager = activityExecutionContext.GetService<IWorkflowInstanceManager>();
var workflowInstanceRepository = activityExecutionContext.GetService<IWorkflowInstanceRepository>();
var scheduler = activityExecutionContext.GetService<IWorkflowScheduler>();
await workflowInstanceManager.SaveAsync(workflowInstance, cancellationToken);
await workflowInstanceRepository.SaveAsync(workflowInstance, cancellationToken);
await scheduler.ScheduleWorkflowAsync(activityExecutionContext.WorkflowExecutionContext.WorkflowBlueprint, workflowInstance.WorkflowInstanceId, activityExecutionContext.ActivityInstance.Id, ExecuteAt, cancellationToken);
}
}

View file

@ -1,10 +1,10 @@
using System;
using System;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Indexes;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
using Microsoft.Extensions.Logging;
using Quartz;
@ -15,14 +15,14 @@ namespace Elsa.Activities.Timers.Jobs
{
private readonly IWorkflowRunner _workflowRunner;
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly ILogger _logger;
public RunWorkflowJob(IWorkflowRunner workflowRunner, IWorkflowRegistry workflowRegistry, IWorkflowInstanceManager workflowInstanceManager, ILogger<RunWorkflowJob> logger)
public RunWorkflowJob(IWorkflowRunner workflowRunner, IWorkflowRegistry workflowRegistry, IWorkflowInstanceRepository workflowInstanceRepository, ILogger<RunWorkflowJob> logger)
{
_workflowRunner = workflowRunner;
_workflowRegistry = workflowRegistry;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_logger = logger;
}
@ -38,7 +38,7 @@ namespace Elsa.Activities.Timers.Jobs
if (workflowInstanceId == null)
{
if (workflowBlueprint.IsSingleton && await GetWorkflowIsAlreadyExecutingAsync(tenantId, workflowDefinitionId, cancellationToken))
if (workflowBlueprint.IsSingleton && await _workflowInstanceManager.IsWorkflowIsAlreadyExecutingAsync(tenantId, workflowDefinitionId, cancellationToken))
return;
await _workflowRunner.RunWorkflowAsync(workflowBlueprint, activityId, cancellationToken: cancellationToken);
@ -60,16 +60,5 @@ namespace Elsa.Activities.Timers.Jobs
await _workflowRunner.RunWorkflowAsync(workflowBlueprint, workflowInstance!, activityId, cancellationToken: cancellationToken);
}
}
private async Task<bool> GetWorkflowIsAlreadyExecutingAsync(string? tenantId, string workflowDefinitionId, CancellationToken cancellationToken)
{
Expression<Func<WorkflowInstanceIndex, bool>> query = index =>
index.WorkflowDefinitionId == workflowDefinitionId
&& index.TenantId == tenantId
&& (index.WorkflowStatus == WorkflowStatus.Running || index.WorkflowStatus == WorkflowStatus.Suspended);
var workflowInstance = await _workflowInstanceManager.Query(query).FirstOrDefaultAsync();
return workflowInstance != null;
}
}
}

View file

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
@ -40,7 +40,6 @@
<PackageReference Include="System.Linq.Async" Version="5.0.0" />
<PackageReference Include="System.Text.Json" Version="5.0.0" />
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
<PackageReference Include="YesSql.Abstractions" Version="2.0.0-beta-1620" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Repositories;
namespace Elsa.Extensions
{
public static class IWorkflowInstanceRepositoryExtensions
{
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(
this IWorkflowInstanceRepository manager,
string workflowDefinitionId,
WorkflowStatus workflowStatus,
CancellationToken cancellationToken = default) =>
manager.ListByDefinitionAndStatusAsync(workflowDefinitionId, default, workflowStatus, cancellationToken);
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(
this IWorkflowInstanceRepository manager,
string workflowDefinitionId,
CancellationToken cancellationToken = default) =>
manager.ListByDefinitionAsync(workflowDefinitionId, default, cancellationToken);
}
}

View file

@ -1,16 +1,12 @@
using Elsa.Data;
using Elsa.Data;
using Elsa.Services;
using Elsa.Triggers;
using YesSql.Indexes;
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddIndexProvider<T>(this IServiceCollection services) where T : class, IIndexProvider => services.AddSingleton<IIndexProvider, T>();
public static IServiceCollection AddScopedIndexProvider<T>(this IServiceCollection services) where T : class, IIndexProvider => services.AddScoped<IScopedIndexProvider>();
public static IServiceCollection AddDataMigration<T>(this IServiceCollection services) where T : class, IDataMigration => services.AddScoped<IDataMigration, T>();
{
public static IServiceCollection AddWorkflowProvider<T>(this IServiceCollection services) where T : class, IWorkflowProvider => services.AddTransient<IWorkflowProvider, T>();
public static IServiceCollection AddTriggerProvider<T>(this IServiceCollection services) where T : class, ITriggerProvider => services.AddTransient<ITriggerProvider, T>();
public static IServiceCollection AddWorkflowContextProvider<T>(this IServiceCollection services) where T : class, IWorkflowContextProvider => services.AddTransient<IWorkflowContextProvider, T>();

View file

@ -1,27 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Services
using Elsa.Models;
namespace Elsa.Repositories
{
public interface IWorkflowDefinitionManager
public interface IWorkflowDefinitionRepository
{
Task SaveAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default);
Task DeleteAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default);
Task<int> CountAsync(VersionOptions? version = default, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowDefinition>> ListAsync(int? skip = default, int? take = default, VersionOptions? version = default, CancellationToken cancellationToken = default);
IQuery<WorkflowDefinition> Query();
IQuery<WorkflowDefinition, TIndex> Query<TIndex>() where TIndex : class, IIndex;
IQuery<WorkflowDefinition, TIndex> Query<TIndex>(Expression<Func<TIndex, bool>> predicate)
where TIndex : class, IIndex;
IQuery<WorkflowDefinition> ExecuteQuery(ICompiledQuery<WorkflowDefinition> query);
Task<WorkflowDefinition> GetAsync(string workflowDefinitionId, VersionOptions version, CancellationToken cancellationToken = default);
Task<WorkflowDefinition> GetByVersionIdAsync(string workflowDefinitionVersionId, CancellationToken cancellationToken = default);
WorkflowDefinition Initialize(WorkflowDefinition workflowDefinition);
}
}
}

View file

@ -0,0 +1,46 @@
using System.Collections.Generic;
using System.Linq;
using Elsa.Models;
namespace Elsa.Repositories
{
public static class IWorkflowDefinitionRepositoryExtensions
{
public static IEnumerable<WorkflowDefinition> WithVersion(this IEnumerable<WorkflowDefinition> query, VersionOptions? version = default)
{
var versionOption = version ?? VersionOptions.Latest;
if (versionOption.IsDraft)
return query.Where(x => !x.IsPublished);
else if (versionOption.IsLatest)
return query.Where(x => x.IsLatest);
else if (versionOption.IsPublished)
return query.Where(x => x.IsPublished);
else if (versionOption.IsLatestOrPublished)
return query.Where(x => x.IsPublished || x.IsLatest);
else if (versionOption.Version > 0)
return query.Where(x => x.Version == versionOption.Version);
return query;
}
public static IQueryable<WorkflowDefinition> WithVersion(this IQueryable<WorkflowDefinition> query, VersionOptions? version = default)
{
var versionOption = version ?? VersionOptions.Latest;
if (versionOption.IsDraft)
return query.Where(x => !x.IsPublished);
else if (versionOption.IsLatest)
return query.Where(x => x.IsLatest);
else if (versionOption.IsPublished)
return query.Where(x => x.IsPublished);
else if (versionOption.IsLatestOrPublished)
return query.Where(x => x.IsPublished || x.IsLatest);
else if (versionOption.Version > 0)
return query.Where(x => x.Version == versionOption.Version);
return query;
}
}
}

View file

@ -0,0 +1,35 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
namespace Elsa.Repositories
{
public interface IWorkflowInstanceRepository
{
Task SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default);
Task DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default);
Task<bool> IsWorkflowIsAlreadyExecutingAsync(string? tenantId, string workflowDefinitionId, CancellationToken cancellationToken = default);
Task<WorkflowInstance> GetByIdAsync(string workflowInstanceId, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListAsync(int page, int pageSize, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListByBlockingActivityTypeAsync(string activityType, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(string workflowDefinitionId, string? tenantId, WorkflowStatus workflowStatus, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListByStatusAsync(WorkflowStatus workflowStatus, CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(string workflowDefinitionId,string? tenantId,CancellationToken cancellationToken = default);
Task<WorkflowInstance?> GetByCorrelationIdAsync(string correlationId, WorkflowStatus status,CancellationToken cancellationToken = default);
Task<IEnumerable<WorkflowInstance>> ListByCorrelationIdAsync(string correlationId,WorkflowStatus status,CancellationToken cancellationToken = default);
Task<int> CountAsync(CancellationToken cancellationToken = default);
}
}

View file

@ -1,18 +0,0 @@
using System;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Services
{
public interface IWorkflowInstanceManager
{
ValueTask SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default);
ValueTask DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default);
IQuery<WorkflowInstance, TIndex> Query<TIndex>() where TIndex : class, IIndex;
IQuery<WorkflowInstance, TIndex> Query<TIndex>(Expression<Func<TIndex, bool>> predicate) where TIndex : class, IIndex;
}
}

View file

@ -1,7 +1,7 @@
using System.Threading.Tasks;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Extensions;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
@ -19,12 +19,12 @@ namespace Elsa.Activities.Signaling
public class InterruptTrigger : Activity
{
private readonly IWorkflowTriggerInterruptor _workflowTriggerInterruptor;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
public InterruptTrigger(IWorkflowTriggerInterruptor workflowTriggerInterruptor, IWorkflowInstanceManager workflowInstanceManager)
public InterruptTrigger(IWorkflowTriggerInterruptor workflowTriggerInterruptor, IWorkflowInstanceRepository workflowInstanceRepository)
{
_workflowTriggerInterruptor = workflowTriggerInterruptor;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
}
[ActivityProperty(Hint = "The ID of the workflow instance to resume.")]

View file

@ -1,7 +1,7 @@
using System.Threading.Tasks;
using Elsa.Exceptions;
using Elsa.Extensions;
using Elsa.Messages;
using Elsa.Repositories;
using Elsa.Services;
using Rebus.Handlers;
@ -10,12 +10,12 @@ namespace Elsa.Consumers
public class RunWorkflowConsumer : IHandleMessages<RunWorkflow>
{
private readonly IWorkflowRunner _workflowRunner;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
public RunWorkflowConsumer(IWorkflowRunner workflowRunner, IWorkflowInstanceManager workflowInstanceManager)
public RunWorkflowConsumer(IWorkflowRunner workflowRunner, IWorkflowInstanceRepository workflowInstanceRepository)
{
_workflowRunner = workflowRunner;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
}
public async Task Handle(RunWorkflow message)

View file

@ -1,59 +0,0 @@
using System;
using System.Linq;
using Elsa.Data.Services;
using Elsa.Runtime;
using Elsa.WorkflowProviders;
using Microsoft.Extensions.DependencyInjection;
using YesSql;
using YesSql.Indexes;
using ISession = YesSql.ISession;
namespace Elsa.Data.Extensions
{
public static class PersistenceServiceCollectionExtensions
{
public static IServiceCollection AddPersistence(
this IServiceCollection services,
Action<IServiceProvider, IConfiguration> configure)
{
services
.AddWorkflowProvider<DatabaseWorkflowProvider>()
.AddSingleton(sp => CreateStore(sp, configure))
.AddScoped(CreateSession)
.AddScoped<IDataMigrationManager, DataMigrationManager>()
.AddStartupTask<DatabaseInitializer>()
.AddStartupTask<DataMigrationsRunner>()
.AddDataMigration<Migrations>();
return services;
}
private static IStore CreateStore(
IServiceProvider serviceProvider,
Action<IServiceProvider, Configuration> configure)
{
var configuration = new Configuration { ContentSerializer = new CustomJsonContentSerializer() };
configure(serviceProvider, configuration);
// TODO: The following line is a temporary workaround until the bug in YesSql is fixed: https://github.com/sebastienros/yessql/pull/280
var store = StoreFactory.CreateAndInitializeAsync(configuration).GetAwaiter().GetResult();
//var store = StoreFactory.Create(configuration);
var indexes = serviceProvider.GetServices<IIndexProvider>();
store.RegisterIndexes(indexes);
return store;
}
private static ISession CreateSession(IServiceProvider serviceProvider)
{
var store = serviceProvider.GetRequiredService<IStore>();
var session = store.CreateSession();
var scopedServices = serviceProvider.GetServices<IScopedIndexProvider>().Cast<IIndexProvider>().ToArray();
session.RegisterIndexes(scopedServices);
return session;
}
}
}

View file

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
@ -51,7 +51,6 @@
<PackageReference Include="System.Linq.Async" Version="5.0.0" />
<PackageReference Include="YamlDotNet" Version="8.1.2" />
<PackageReference Include="Rebus.ServiceProvider" Version="5.0.6" />
<PackageReference Include="YesSql.Provider.Sqlite" Version="1.0.0-beta-1620" />
</ItemGroup>
<ItemGroup>

View file

@ -12,10 +12,8 @@ using Rebus.Logging;
using Rebus.Persistence.InMem;
using Rebus.Routing.TypeBased;
using Rebus.Transport.InMem;
using YesSql;
using Storage.Net;
using Storage.Net.Blobs;
using YesSql.Provider.Sqlite;
namespace Elsa
{
@ -25,7 +23,6 @@ namespace Elsa
{
Services = services;
ConfigurePersistence = (sp, config) => config.UseSqLite("Data Source=elsa.db;Cache=Shared", IsolationLevel.ReadUncommitted);
StorageFactory = sp => Storage.Net.StorageFactory.Blobs.InMemory();
DistributedLockProviderFactory = sp => new DefaultLockProvider();
SignalFactory = sp => new Signal();
@ -52,7 +49,6 @@ namespace Elsa
}
public IServiceCollection Services { get; }
internal Action<IServiceProvider, IConfiguration> ConfigurePersistence { get; set; }
internal Func<IServiceProvider, IBlobStorage> StorageFactory { get; set; }
internal Func<IServiceProvider, IDistributedLockProvider> DistributedLockProviderFactory { get; private set; }
internal Func<IServiceProvider, ISignal> SignalFactory { get; private set; }
@ -73,14 +69,6 @@ namespace Elsa
return this;
}
public ElsaOptions UsePersistence(Action<IConfiguration> configure) => UsePersistence((sp, config) => configure(config));
public ElsaOptions UsePersistence(Action<IServiceProvider, IConfiguration> configure)
{
ConfigurePersistence = configure;
return this;
}
public ElsaOptions UseStorage(Func<IBlobStorage> factory) => UseStorage(_ => factory());
public ElsaOptions UseStorage(Func<IServiceProvider, IBlobStorage> factory)

View file

@ -10,11 +10,9 @@ using Elsa.ActivityTypeProviders;
using Elsa.Builders;
using Elsa.Consumers;
using Elsa.Converters;
using Elsa.Data.Extensions;
using Elsa.Expressions;
using Elsa.Extensions;
using Elsa.HostedServices;
using Elsa.Indexes;
using Elsa.Mapping;
using Elsa.Metadata;
using Elsa.Metadata.Handlers;
@ -44,8 +42,7 @@ namespace Microsoft.Extensions.DependencyInjection
.AddSingleton(options)
.AddSingleton(options.DistributedLockProviderFactory)
.AddSingleton(options.SignalFactory)
.AddSingleton(options.StorageFactory)
.AddPersistence(options.ConfigurePersistence);
.AddSingleton(options.StorageFactory);
options.AddWorkflowsCore();
options.AddMediatR();
@ -100,12 +97,8 @@ namespace Microsoft.Extensions.DependencyInjection
.AddSingleton<IWorkflowBlueprintMaterializer, WorkflowBlueprintMaterializer>()
.AddSingleton<IWorkflowBlueprintReflector, WorkflowBlueprintReflector>()
.AddScoped<IWorkflowSelector, WorkflowSelector>()
.AddScoped<IWorkflowDefinitionManager, WorkflowDefinitionManager>()
.AddScoped<IWorkflowInstanceManager, WorkflowInstanceManager>()
.AddScoped<IWorkflowPublisher, WorkflowPublisher>()
.AddScoped<IWorkflowContextManager, WorkflowContextManager>()
.AddIndexProvider<WorkflowDefinitionIndexProvider>()
.AddIndexProvider<WorkflowInstanceIndexProvider>()
.AddScoped<IWorkflowContextManager, WorkflowContextManager>()
.AddStartupRunner()
.AddSingleton<IActivityTypeService, ActivityTypeService>()
.AddSingleton<IActivityTypeProvider, TypeBasedActivityProvider>()

View file

@ -1,64 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using Elsa.Indexes;
using Elsa.Models;
using YesSql;
namespace Elsa.Extensions
{
public static class WorkflowDefinitionExtensions
{
public static IEnumerable<WorkflowDefinition> WithVersion(
this IEnumerable<WorkflowDefinition> query,
VersionOptions version)
{
return query.AsQueryable().WithVersion(version);
}
public static IQueryable<WorkflowDefinition> WithVersion(
this IQueryable<WorkflowDefinition> query,
VersionOptions version)
{
if (version.IsDraft)
query = query.Where(x => !x.IsPublished);
else if (version.IsLatest)
query = query.Where(x => x.IsLatest);
else if (version.IsPublished)
query = query.Where(x => x.IsPublished);
else if (version.IsLatestOrPublished)
query = query.Where(x => x.IsPublished || x.IsLatest);
else if (version.AllVersions)
{
// Nothing to filter.
}
else if (version.Version > 0)
query = query.Where(x => x.Version == version.Version);
return query.OrderByDescending(x => x.Version);
}
public static IQuery<WorkflowDefinition> WithVersion(
this IQuery<WorkflowDefinition> query,
VersionOptions version)
{
var index = query.With<WorkflowDefinitionIndex>();
if (version.IsDraft)
query = index.Where(x => !x.IsPublished);
else if (version.IsLatest)
query = index.Where(x => x.IsLatest);
else if (version.IsPublished)
query = index.Where(x => x.IsPublished);
else if (version.IsLatestOrPublished)
query = index.Where(x => x.IsPublished || x.IsLatest);
else if (version.AllVersions)
{
// Nothing to filter.
}
else if (version.Version > 0)
query = index.Where(x => x.Version == version.Version);
return index.OrderByDescending(x => x.Version);
}
}
}

View file

@ -1,48 +0,0 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Indexes;
using Elsa.Models;
using Elsa.Services;
using YesSql;
namespace Elsa.Extensions
{
public static class WorkflowDefinitionManagerExtensions
{
public static IQuery<WorkflowDefinition> QueryByIdAndVersion(this IWorkflowDefinitionManager manager, string workflowDefinitionId, VersionOptions versionOptions) =>
manager.Query<WorkflowDefinitionIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId).WithVersion(versionOptions);
public static IQuery<WorkflowDefinition> QueryByVersionId(this IWorkflowDefinitionManager manager, string workflowDefinitionVersionId) =>
manager.Query<WorkflowDefinitionIndex>(x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId);
public static async Task<WorkflowDefinition?> GetAsync(
this IWorkflowDefinitionManager manager,
string workflowDefinitionId,
VersionOptions versionOptions,
CancellationToken cancellationToken = default) =>
await manager.QueryByIdAndVersion(workflowDefinitionId, versionOptions).FirstOrDefaultAsync();
public static async Task<WorkflowDefinition?> GetByVersionIdAsync(
this IWorkflowDefinitionManager manager,
string workflowDefinitionVersionId,
CancellationToken cancellationToken = default) =>
await manager.QueryByVersionId(workflowDefinitionVersionId).FirstOrDefaultAsync();
public static Task<IEnumerable<WorkflowInstance>> ListByStatusAsync(
this IWorkflowInstanceManager manager,
WorkflowStatus workflowStatus,
CancellationToken cancellationToken = default) =>
manager
.Query<WorkflowInstanceIndex>(x => x.WorkflowStatus == workflowStatus)
.ListAsync();
public static Task<IEnumerable<WorkflowInstance>> ListByBlockingActivityTypeAsync(
this IWorkflowInstanceManager manager,
string activityType,
CancellationToken cancellationToken = default) =>
manager
.Query<WorkflowInstanceBlockingActivitiesIndex>(x => x.ActivityType == activityType)
.ListAsync();
}
}

View file

@ -1,73 +0,0 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Indexes;
using Elsa.Models;
using Elsa.Services;
namespace Elsa.Extensions
{
public static class WorkflowInstanceManagerExtensions
{
public static async Task<WorkflowInstance?> GetByIdAsync(
this IWorkflowInstanceManager manager,
string workflowInstanceId,
CancellationToken cancellationToken = default) =>
await manager.Query<WorkflowInstanceIndex>(x => x.WorkflowInstanceId == workflowInstanceId).FirstOrDefaultAsync();
public static async Task<WorkflowInstance?> GetByCorrelationIdAsync(
this IWorkflowInstanceManager manager,
string correlationId,
WorkflowStatus status,
CancellationToken cancellationToken = default) =>
await manager.Query<WorkflowInstanceIndex>(x => x.CorrelationId == correlationId && x.WorkflowStatus == status).FirstOrDefaultAsync();
public static async Task<int> CountAsync(this IWorkflowInstanceManager manager, CancellationToken cancellationToken = default) => await manager.Query<WorkflowInstanceIndex>().CountAsync();
public static async Task<IEnumerable<WorkflowInstance>> ListAsync(
this IWorkflowInstanceManager manager,
int page,
int pageSize,
CancellationToken cancellationToken = default) =>
await manager.Query<WorkflowInstanceIndex>().Skip(page * pageSize).Take(pageSize).ListAsync();
public static async Task<IEnumerable<WorkflowInstance>> ListByCorrelationIdAsync(
this IWorkflowInstanceManager manager,
string correlationId,
WorkflowStatus status,
CancellationToken cancellationToken = default) =>
await manager.Query<WorkflowInstanceIndex>(x => x.CorrelationId == correlationId && x.WorkflowStatus == status).ListAsync();
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(
this IWorkflowInstanceManager manager,
string workflowDefinitionId,
string? tenantId,
WorkflowStatus workflowStatus,
CancellationToken cancellationToken = default)
{
return manager.Query<WorkflowInstanceIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId && x.WorkflowStatus == workflowStatus).ListAsync();
}
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(
this IWorkflowInstanceManager manager,
string workflowDefinitionId,
WorkflowStatus workflowStatus,
CancellationToken cancellationToken = default) =>
manager.ListByDefinitionAndStatusAsync(workflowDefinitionId, default, workflowStatus, cancellationToken);
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(
this IWorkflowInstanceManager manager,
string workflowDefinitionId,
string? tenantId,
CancellationToken cancellationToken = default)
{
return manager.Query<WorkflowInstanceIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId).ListAsync();
}
public static Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(
this IWorkflowInstanceManager manager,
string workflowDefinitionId,
CancellationToken cancellationToken = default) =>
manager.ListByDefinitionAsync(workflowDefinitionId, default, cancellationToken);
}
}

View file

@ -2,7 +2,7 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Events;
using Elsa.Models;
using Elsa.Services;
using Elsa.Repositories;
using Elsa.Services.Models;
using MediatR;
using Microsoft.Extensions.Logging;
@ -15,12 +15,12 @@ namespace Elsa.Handlers
INotificationHandler<ActivityExecuted>,
INotificationHandler<WorkflowCompleted>
{
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly ILogger _logger;
public PersistWorkflow(IWorkflowInstanceManager workflowInstanceManager, ILogger<PersistWorkflow> logger)
public PersistWorkflow(IWorkflowInstanceRepository workflowInstanceRepository, ILogger<PersistWorkflow> logger)
{
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_logger = logger;
}

View file

@ -1,44 +0,0 @@
using System;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Data;
using Elsa.Events;
using Elsa.Models;
using MediatR;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Services
{
public class WorkflowInstanceManager : IWorkflowInstanceManager
{
private readonly ISession _session;
private readonly IMediator _mediator;
public WorkflowInstanceManager(ISession session, IMediator mediator)
{
_session = session;
_mediator = mediator;
}
public async ValueTask SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
_session.Save(workflowInstance, CollectionNames.WorkflowInstances);
await _session.CommitAsync();
await _mediator.Publish(new WorkflowInstanceSaved(workflowInstance), cancellationToken);
}
public async ValueTask DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
_session.Delete(workflowInstance, CollectionNames.WorkflowInstances);
await _session.CommitAsync();
await _mediator.Publish(new WorkflowInstanceDeleted(workflowInstance), cancellationToken);
}
public IQuery<WorkflowInstance> Query() => _session.Query<WorkflowInstance>(CollectionNames.WorkflowInstances);
public IQuery<WorkflowInstance, TIndex> Query<TIndex>() where TIndex : class, IIndex => _session.Query<WorkflowInstance, TIndex>(CollectionNames.WorkflowInstances);
public IQuery<WorkflowInstance, TIndex> Query<TIndex>(Expression<Func<TIndex, bool>> predicate) where TIndex : class, IIndex => _session.Query<WorkflowInstance, TIndex>(predicate, CollectionNames.WorkflowInstances);
public IQuery<WorkflowInstance> ExecuteQuery(ICompiledQuery<WorkflowInstance> query) => _session.ExecuteQuery(query, CollectionNames.WorkflowInstances);
}
}

View file

@ -2,18 +2,19 @@ using System.Threading;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
namespace Elsa.Services
{
public class WorkflowPublisher : IWorkflowPublisher
{
private readonly IWorkflowDefinitionManager _workflowDefinitionManager;
private readonly IWorkflowDefinitionRepository _workflowDefinitionRepository;
private readonly IIdGenerator _idGenerator;
private readonly ICloner _cloner;
public WorkflowPublisher(IWorkflowDefinitionManager workflowDefinitionManager, IIdGenerator idGenerator, ICloner cloner)
public WorkflowPublisher(IWorkflowDefinitionRepository workflowDefinitionRepository, IIdGenerator idGenerator, ICloner cloner)
{
_workflowDefinitionManager = workflowDefinitionManager;
_workflowDefinitionRepository = workflowDefinitionRepository;
_idGenerator = idGenerator;
_cloner = cloner;
}
@ -39,7 +40,7 @@ namespace Elsa.Services
string workflowDefinitionId,
CancellationToken cancellationToken)
{
var definition = await _workflowDefinitionManager.GetAsync(
var definition = await _workflowDefinitionRepository.GetAsync(
workflowDefinitionId,
VersionOptions.Latest,
cancellationToken);
@ -52,7 +53,7 @@ namespace Elsa.Services
public async Task<WorkflowDefinition> PublishAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken)
{
var publishedDefinition = await _workflowDefinitionManager.GetAsync(
var publishedDefinition = await _workflowDefinitionRepository.GetAsync(
workflowDefinition.WorkflowDefinitionId,
VersionOptions.Published,
cancellationToken);
@ -61,7 +62,7 @@ namespace Elsa.Services
{
publishedDefinition.IsPublished = false;
publishedDefinition.IsLatest = false;
await _workflowDefinitionManager.SaveAsync(publishedDefinition, cancellationToken);
await _workflowDefinitionRepository.SaveAsync(publishedDefinition, cancellationToken);
}
if (workflowDefinition.IsPublished)
@ -76,14 +77,14 @@ namespace Elsa.Services
workflowDefinition.IsLatest = true;
workflowDefinition = Initialize(workflowDefinition);
await _workflowDefinitionManager.SaveAsync(workflowDefinition, cancellationToken);
await _workflowDefinitionRepository.SaveAsync(workflowDefinition, cancellationToken);
return workflowDefinition;
}
public async Task<WorkflowDefinition?> GetDraftAsync(string workflowDefinitionId, CancellationToken cancellationToken)
{
var definition = await _workflowDefinitionManager.GetAsync(
var definition = await _workflowDefinitionRepository.GetAsync(
workflowDefinitionId,
VersionOptions.Latest,
cancellationToken);
@ -108,7 +109,7 @@ namespace Elsa.Services
{
var draft = workflowDefinition;
var latestVersion = await _workflowDefinitionManager.GetAsync(
var latestVersion = await _workflowDefinitionRepository.GetAsync(
workflowDefinition.WorkflowDefinitionId,
VersionOptions.Latest,
cancellationToken);
@ -117,14 +118,14 @@ namespace Elsa.Services
{
latestVersion.IsLatest = false;
await _workflowDefinitionManager.SaveAsync(latestVersion, cancellationToken);
await _workflowDefinitionRepository.SaveAsync(latestVersion, cancellationToken);
}
draft.IsLatest = true;
draft.IsPublished = false;
draft = Initialize(draft);
await _workflowDefinitionManager.SaveAsync(draft, cancellationToken);
await _workflowDefinitionRepository.SaveAsync(draft, cancellationToken);
return draft;
}

View file

@ -7,8 +7,8 @@ using Elsa.ActivityResults;
using Elsa.Builders;
using Elsa.Events;
using Elsa.Exceptions;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services.Models;
using Elsa.Triggers;
using MediatR;
@ -28,7 +28,7 @@ namespace Elsa.Services
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowFactory _workflowFactory;
private readonly IWorkflowSelector _workflowSelector;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly Func<IWorkflowBuilder> _workflowBuilderFactory;
private readonly IWorkflowContextManager _workflowContextManager;
private readonly IMediator _mediator;
@ -43,7 +43,7 @@ namespace Elsa.Services
IWorkflowContextManager workflowContextManager,
IMediator mediator,
IServiceProvider serviceProvider,
ILogger<WorkflowRunner> logger, IWorkflowInstanceManager workflowInstanceManager)
ILogger<WorkflowRunner> logger, IWorkflowInstanceRepository workflowInstanceRepository)
{
_workflowRegistry = workflowRegistry;
_workflowFactory = workflowFactory;
@ -52,7 +52,7 @@ namespace Elsa.Services
_mediator = mediator;
_serviceProvider = serviceProvider;
_logger = logger;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_workflowSelector = workflowSelector;
}

View file

@ -20,7 +20,7 @@
// public class WorkflowScheduler : IWorkflowScheduler, INotificationHandler<WorkflowCompleted>
// {
// private readonly ICommandSender _commandSender;
// private readonly IWorkflowInstanceManager _workflowInstanceManager;
// private readonly IWorkflowInstanceRepository _workflowInstanceManager;
// private readonly IWorkflowFactory _workflowFactory;
// private readonly IWorkflowSelector _workflowSelector;
// private readonly IWorkflowRegistry _workflowRegistry;
@ -28,14 +28,14 @@
//
// public WorkflowScheduler(
// ICommandSender commandSender,
// IWorkflowInstanceManager workflowInstanceManager,
// IWorkflowInstanceRepository workflowInstanceRepository,
// IWorkflowFactory workflowFactory,
// IWorkflowSelector workflowSelector,
// IWorkflowRegistry workflowRegistry,
// IWorkflowSchedulerQueue queue)
// {
// _commandSender = commandSender;
// _workflowInstanceManager = workflowInstanceManager;
// _workflowInstanceManager = workflowInstanceRepository;
// _workflowFactory = workflowFactory;
// _workflowSelector = workflowSelector;
// _workflowRegistry = workflowRegistry;

View file

@ -1,11 +1,12 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Exceptions;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services.Models;
namespace Elsa.Services
@ -14,13 +15,13 @@ namespace Elsa.Services
{
private readonly IWorkflowRunner _workflowRunner;
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
public WorkflowTriggerInterruptor(IWorkflowRunner workflowRunner, IWorkflowRegistry workflowRegistry, IWorkflowInstanceManager workflowInstanceManager)
public WorkflowTriggerInterruptor(IWorkflowRunner workflowRunner, IWorkflowRegistry workflowRegistry, IWorkflowInstanceRepository workflowInstanceRepository)
{
_workflowRunner = workflowRunner;
_workflowRegistry = workflowRegistry;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
}
public async Task<WorkflowInstance> InterruptActivityAsync(WorkflowInstance workflowInstance, string activityId, object? input, CancellationToken cancellationToken)

View file

@ -3,6 +3,7 @@ using System.Threading.Tasks;
using Elsa.DistributedLock;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
namespace Elsa.StartupTasks
@ -13,16 +14,16 @@ namespace Elsa.StartupTasks
/// </summary>
public class ResumeRunningWorkflowsTask : IStartupTask
{
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly IWorkflowRunner _workflowScheduler;
private readonly IDistributedLockProvider _distributedLockProvider;
public ResumeRunningWorkflowsTask(
IWorkflowInstanceManager workflowInstanceManager,
IWorkflowInstanceRepository workflowInstanceRepository,
IWorkflowRunner workflowScheduler,
IDistributedLockProvider distributedLockProvider)
{
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_workflowScheduler = workflowScheduler;
_distributedLockProvider = distributedLockProvider;
}

View file

@ -1,10 +1,10 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
using Microsoft.Extensions.Caching.Memory;
@ -18,7 +18,7 @@ namespace Elsa.Triggers
private const string CacheKey = "WorkflowSelector:Triggers";
private readonly IWorkflowRegistry _workflowRegistry;
private readonly IWorkflowFactory _workflowFactory;
private readonly IWorkflowInstanceManager _workflowInstanceManager;
private readonly IWorkflowInstanceRepository _workflowInstanceManager;
private readonly IWorkflowContextManager _workflowContextManager;
private readonly IEnumerable<ITriggerProvider> _triggerProviders;
private readonly IMemoryCache _memoryCache;
@ -28,7 +28,7 @@ namespace Elsa.Triggers
public WorkflowSelector(
IWorkflowRegistry workflowRegistry,
IWorkflowFactory workflowFactory,
IWorkflowInstanceManager workflowInstanceManager,
IWorkflowInstanceRepository workflowInstanceRepository,
IWorkflowContextManager workflowContextManager,
IEnumerable<ITriggerProvider> triggerProviders,
IMemoryCache memoryCache,
@ -36,7 +36,7 @@ namespace Elsa.Triggers
{
_workflowRegistry = workflowRegistry;
_workflowFactory = workflowFactory;
_workflowInstanceManager = workflowInstanceManager;
_workflowInstanceManager = workflowInstanceRepository;
_workflowContextManager = workflowContextManager;
_triggerProviders = triggerProviders;
_memoryCache = memoryCache;

View file

@ -1,7 +1,9 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Repositories;
using Elsa.Services;
using Elsa.Services.Models;
@ -12,18 +14,18 @@ namespace Elsa.WorkflowProviders
/// </summary>
public class DatabaseWorkflowProvider : WorkflowProvider
{
private readonly IWorkflowDefinitionManager _workflowDefinitionManager;
private readonly IWorkflowDefinitionRepository _workflowDefinitionRepository;
private readonly IWorkflowBlueprintMaterializer _workflowBlueprintMaterializer;
public DatabaseWorkflowProvider(IWorkflowDefinitionManager workflowDefinitionManager, IWorkflowBlueprintMaterializer workflowBlueprintMaterializer)
public DatabaseWorkflowProvider(IWorkflowDefinitionRepository workflowDefinitionRepository, IWorkflowBlueprintMaterializer workflowBlueprintMaterializer)
{
_workflowDefinitionManager = workflowDefinitionManager;
_workflowDefinitionRepository = workflowDefinitionRepository;
_workflowBlueprintMaterializer = workflowBlueprintMaterializer;
}
protected override async ValueTask<IEnumerable<IWorkflowBlueprint>> OnGetWorkflowsAsync(CancellationToken cancellationToken)
{
var workflowDefinitions = await _workflowDefinitionManager.ListAsync(cancellationToken: cancellationToken);
var workflowDefinitions = await _workflowDefinitionRepository.ListAsync(cancellationToken: cancellationToken);
return workflowDefinitions.Select(_workflowBlueprintMaterializer.CreateWorkflowBlueprint);
}
}

View file

@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<RootNamespace>Elsa.Persistence.InMemory</RootNamespace>
<PackageVersion>1.0.0</PackageVersion>
<Authors>Elsa Contributors</Authors>
<Description>
Elsa is a set of workflow libraries and tools that enable super-fast workflowing capabilities in any .NET Core application.
This package provides a InMemory persistence provider.
</Description>
<Copyright>2020</Copyright>
<PackageProjectUrl>https://github.com/elsa-workflows/elsa-core</PackageProjectUrl>
<RepositoryUrl>https://github.com/elsa-workflows/elsa-core</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType>
<PackageTags>elsa, workflows, orchard</PackageTags>
<PackageIcon>icon.png</PackageIcon>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="icon.png">
<Pack>True</Pack>
<PackagePath />
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\core\Elsa.Core\Elsa.Core.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,20 @@
using Elsa.Repositories;
using Elsa.WorkflowProviders;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Persistence.InMemory
{
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddElsaPersistenceInMemory(this IServiceCollection services)
{
// Scoped, because IMediator is registered as Scoped and IIdGenerator could also be registered as Scoped
services.AddScoped<IWorkflowDefinitionRepository, InMemoryWorkflowDefinitionRepository>()
.AddScoped<IWorkflowInstanceRepository, InMemoryWorkflowInstanceRepository>()
.AddWorkflowProvider<DatabaseWorkflowProvider>();
return services;
}
}
}

View file

@ -0,0 +1,82 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
namespace Elsa.Persistence.InMemory
{
public class InMemoryWorkflowDefinitionRepository : IWorkflowDefinitionRepository
{
private static readonly List<WorkflowDefinition> _definitions = new List<WorkflowDefinition>();
private readonly IIdGenerator _idGenerator;
public InMemoryWorkflowDefinitionRepository(IIdGenerator idGenerator)
{
_idGenerator = idGenerator;
}
public Task<int> CountAsync(VersionOptions? version = null, CancellationToken cancellationToken = default)
{
return Task.FromResult(_definitions.WithVersion(version).Count());
}
public Task DeleteAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default)
{
_definitions.Remove(workflowDefinition);
return Task.CompletedTask;
}
public Task<WorkflowDefinition> GetAsync(string workflowDefinitionId, VersionOptions version, CancellationToken cancellationToken = default)
{
return Task.FromResult(_definitions.WithVersion(version).Where(x => x.WorkflowDefinitionId == workflowDefinitionId).FirstOrDefault());
}
public Task<WorkflowDefinition> GetByVersionIdAsync(string workflowDefinitionVersionId, CancellationToken cancellationToken = default)
{
return Task.FromResult(_definitions.Where(x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId).FirstOrDefault());
}
public WorkflowDefinition Initialize(WorkflowDefinition workflowDefinition)
{
if (string.IsNullOrWhiteSpace(workflowDefinition.WorkflowDefinitionId))
workflowDefinition.WorkflowDefinitionId = _idGenerator.Generate();
if (workflowDefinition.Version == 0)
workflowDefinition.Version = 1;
if (string.IsNullOrWhiteSpace(workflowDefinition.WorkflowDefinitionVersionId))
workflowDefinition.WorkflowDefinitionVersionId = _idGenerator.Generate();
return workflowDefinition;
}
public Task<IEnumerable<WorkflowDefinition>> ListAsync(int? skip = null, int? take = null, VersionOptions? version = null, CancellationToken cancellationToken = default)
{
var query = _definitions.WithVersion();
if(skip.HasValue)
{
query = query.Skip(skip.Value);
}
if(take.HasValue)
{
query = query.Take(take.Value);
}
return Task.FromResult(query);
}
public Task SaveAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default)
{
workflowDefinition = Initialize(workflowDefinition);
_definitions.Add(workflowDefinition);
return Task.CompletedTask;
}
}
}

View file

@ -0,0 +1,111 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Events;
using Elsa.Models;
using Elsa.Repositories;
using MediatR;
#nullable disable
namespace Elsa.Persistence.InMemory
{
public class InMemoryWorkflowInstanceRepository : IWorkflowInstanceRepository
{
private static readonly List<WorkflowInstance> _instances = new List<WorkflowInstance>();
private readonly IMediator _mediator;
public InMemoryWorkflowInstanceRepository(IMediator mediator)
{
_mediator = mediator;
}
public Task<int> CountAsync(CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.Count());
}
public async Task DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
_instances.Remove(workflowInstance);
await _mediator.Publish(new WorkflowInstanceDeleted(workflowInstance), cancellationToken);
}
public Task<WorkflowInstance> GetByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.FirstOrDefault(instance => instance.CorrelationId == correlationId && instance.Status == status));
}
public Task<WorkflowInstance> GetByIdAsync(string workflowInstanceId, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances
.FirstOrDefault(instance => instance.WorkflowInstanceId == workflowInstanceId));
}
public Task<bool> IsWorkflowIsAlreadyExecutingAsync(string tenantId, string workflowDefinitionId, CancellationToken cancellationToken = default)
{
return Task.FromResult<bool>(_instances
.Any(instance => instance.WorkflowDefinitionId == workflowDefinitionId
&& (instance.Status == WorkflowStatus.Running || instance.Status == WorkflowStatus.Suspended)
&& instance.TenantId == tenantId));
}
public Task<IEnumerable<WorkflowInstance>> ListAsync(int page, int pageSize, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.Skip(page * pageSize).Take(pageSize));
}
public Task<IEnumerable<WorkflowInstance>> ListByBlockingActivityTypeAsync(string activityType, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances
.Where(instance => instance.BlockingActivities.Any(a => a.ActivityType == activityType)));
}
public Task<IEnumerable<WorkflowInstance>> ListByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.Where(instance => instance.CorrelationId == correlationId && instance.Status == status));
}
public Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(string workflowDefinitionId, string tenantId, WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances
.Where(instance => instance.WorkflowDefinitionId == workflowDefinitionId && instance.Status == workflowStatus
&& instance.TenantId == tenantId));
}
public Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(string workflowDefinitionId, string tenantId, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.Where(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId));
}
public Task<IEnumerable<WorkflowInstance>> ListByStatusAsync(WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return Task.FromResult(_instances.Where(instance => instance.Status == workflowStatus));
}
public async Task SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
if (workflowInstance.Id == 0)
{
workflowInstance.Id = workflowInstance.WorkflowInstanceId.GetHashCode();
_instances.Add(workflowInstance);
}
else
{
for (var i = 0; i < _instances.Count; i++)
{
if (workflowInstance.WorkflowInstanceId == _instances[i].WorkflowInstanceId)
{
_instances[i] = workflowInstance;
}
}
}
await _mediator.Publish(new WorkflowInstanceSaved(workflowInstance), cancellationToken);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View file

@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<RootNamespace>Elsa.Persistence.MongoDb</RootNamespace>
<PackageVersion>1.0.0</PackageVersion>
<Authors>Elsa Contributors</Authors>
<Description>
Elsa is a set of workflow libraries and tools that enable super-fast workflowing capabilities in any .NET Core application.
This package provides a MongoDb persistence provider.
</Description>
<Copyright>2020</Copyright>
<PackageProjectUrl>https://github.com/elsa-workflows/elsa-core</PackageProjectUrl>
<RepositoryUrl>https://github.com/elsa-workflows/elsa-core</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType>
<PackageTags>elsa, workflows, orchard</PackageTags>
<PackageIcon>icon.png</PackageIcon>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="icon.png">
<Pack>True</Pack>
<PackagePath />
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="2.11.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\core\Elsa.Core\Elsa.Core.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,24 @@
using Elsa.Data;
using Elsa.Models;
using Microsoft.Extensions.Options;
using MongoDB.Driver;
namespace Elsa.Persistence.MongoDb
{
public class ElsaMongoDbClient
{
private readonly MongoClient _mongoClient;
private readonly IMongoDatabase _mongoDatabase;
public ElsaMongoDbClient(IOptions<ElsaMongoDbOptions> options)
{
_mongoClient = new MongoClient(options.Value.ConnectionString);
_mongoDatabase = _mongoClient.GetDatabase(options.Value.Db);
}
public IMongoCollection<WorkflowDefinition> WorkflowDefinitions => _mongoDatabase.GetCollection<WorkflowDefinition>(CollectionNames.WorkflowDefinitions);
public IMongoCollection<WorkflowInstance> WorkflowInstances => _mongoDatabase.GetCollection<WorkflowInstance>(CollectionNames.WorkflowInstances);
}
}

View file

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Elsa.Persistence.MongoDb
{
public class ElsaMongoDbOptions
{
public string? ConnectionString { get; set; }
public string? Db { get; set; }
}
}

View file

@ -0,0 +1,49 @@
using System;
using Elsa.Persistence.MongoDb.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
using Elsa.Repositories;
using Elsa.Runtime;
using Elsa.WorkflowProviders;
using Elsa.Models;
using MongoDB.Driver;
namespace Elsa.Persistence.MongoDb
{
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddElsaPersistenceMongoDb(this IServiceCollection services, Action<ElsaMongoDbOptions> configureOptions)
{
AddCore(services);
services.Configure<ElsaMongoDbOptions>(configureOptions);
return services;
}
public static IServiceCollection AddElsaPersistenceMongoDb(this IServiceCollection services, IConfiguration options)
{
AddCore(services);
services.Configure<ElsaMongoDbOptions>(options);
return services;
}
private static void AddCore(IServiceCollection services)
{
services.AddScoped<IWorkflowDefinitionRepository, MongoDbWorkflowDefinitionRepository>()
.AddScoped<IWorkflowInstanceRepository, MongoDbWorkflowInstanceRepository>()
.AddScoped<ElsaMongoDbClient>()
.AddScoped<IMongoCollection<WorkflowDefinition>>(services => services.GetRequiredService<ElsaMongoDbClient>().WorkflowDefinitions)
.AddScoped<IMongoCollection<WorkflowInstance>>(services => services.GetRequiredService<ElsaMongoDbClient>().WorkflowInstances)
.AddWorkflowProvider<DatabaseWorkflowProvider>()
.AddStartupTask<DatabaseInitializer>();
DatabaseRegister.RegisterMapsAndSerializers();
}
}
}

View file

@ -0,0 +1,104 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Repositories;
using Elsa.Services;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
namespace Elsa.Persistence.MongoDb
{
public class MongoDbWorkflowDefinitionRepository : IWorkflowDefinitionRepository
{
private readonly IMongoCollection<WorkflowDefinition> _workflowDefinitions;
private readonly IIdGenerator _idGenerator;
public MongoDbWorkflowDefinitionRepository(IMongoCollection<WorkflowDefinition> workflowDefinitions, IIdGenerator idGenerator)
{
_workflowDefinitions = workflowDefinitions;
_idGenerator = idGenerator;
}
public async Task<int> CountAsync(VersionOptions? version = null, CancellationToken cancellationToken = default)
{
return await ((IMongoQueryable<WorkflowDefinition>)_workflowDefinitions.AsQueryable().WithVersion(version)).CountAsync();
}
public async Task DeleteAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default)
{
var filter = GetFilterWorkflowDefinitionId(workflowDefinition.Id);
await _workflowDefinitions.DeleteOneAsync(filter);
}
public async Task<WorkflowDefinition> GetAsync(string workflowDefinitionId, VersionOptions versionOptions, CancellationToken cancellationToken = default)
{
return await((IMongoQueryable<WorkflowDefinition>)_workflowDefinitions
.AsQueryable()
.Where(x => x.WorkflowDefinitionId == workflowDefinitionId)
.WithVersion(versionOptions)).FirstOrDefaultAsync();
}
public async Task<WorkflowDefinition> GetByVersionIdAsync(string workflowDefinitionVersionId, CancellationToken cancellationToken = default)
{
return await((IMongoQueryable<WorkflowDefinition>)_workflowDefinitions
.AsQueryable()
.Where(x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId)).FirstOrDefaultAsync();
}
public WorkflowDefinition Initialize(WorkflowDefinition workflowDefinition)
{
if (string.IsNullOrWhiteSpace(workflowDefinition.WorkflowDefinitionId))
workflowDefinition.WorkflowDefinitionId = _idGenerator.Generate();
if (workflowDefinition.Version == 0)
workflowDefinition.Version = 1;
if (string.IsNullOrWhiteSpace(workflowDefinition.WorkflowDefinitionVersionId))
workflowDefinition.WorkflowDefinitionVersionId = _idGenerator.Generate();
return workflowDefinition;
}
public async Task<IEnumerable<WorkflowDefinition>> ListAsync(int? skip = null, int? take = null, VersionOptions? version = null, CancellationToken cancellationToken = default)
{
var query = _workflowDefinitions
.AsQueryable()
.WithVersion(version);
if (skip != null)
query = query.Skip(skip.Value);
if (take != null)
query = query.Take(take.Value);
return await ((IMongoQueryable<WorkflowDefinition>)query).ToListAsync();
}
public async Task SaveAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default)
{
if (workflowDefinition.Id == 0)
{
// If there is no instance yet, max throws an error
if (await _workflowDefinitions.AsQueryable().AnyAsync())
{
workflowDefinition.Id = await _workflowDefinitions.AsQueryable().MaxAsync(x => x.Id) + 1;
}
else
{
workflowDefinition.Id = 1;
}
}
var filter = GetFilterWorkflowDefinitionId(workflowDefinition.Id);
await _workflowDefinitions.ReplaceOneAsync(filter, workflowDefinition, new ReplaceOptions { IsUpsert = true });
}
private FilterDefinition<WorkflowDefinition> GetFilterWorkflowDefinitionId(int id) => Builders<WorkflowDefinition>.Filter.Where(x => x.Id == id);
}
}

View file

@ -0,0 +1,131 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Events;
using Elsa.Models;
using Elsa.Repositories;
using MediatR;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
namespace Elsa.Persistence.MongoDb
{
public class MongoDbWorkflowInstanceRepository : IWorkflowInstanceRepository
{
private readonly IMongoCollection<WorkflowInstance> _workflowInstances;
private readonly IMediator _mediator;
public MongoDbWorkflowInstanceRepository(IMediator mediator, IMongoCollection<WorkflowInstance> workflowInstances)
{
_mediator = mediator;
_workflowInstances = workflowInstances;
}
public async Task<int> CountAsync(CancellationToken cancellationToken = default)
{
var count = await _workflowInstances.CountDocumentsAsync(new BsonDocument());
return (int)count;
}
public async Task DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
var filter = GetFilterWorkflowId(workflowInstance.Id);
await _workflowInstances.DeleteOneAsync(filter);
await _mediator.Publish(new WorkflowInstanceDeleted(workflowInstance), cancellationToken);
}
public Task<WorkflowInstance?> GetByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return _workflowInstances.AsQueryable()
.FirstOrDefaultAsync(instance => instance.CorrelationId == correlationId && instance.Status == status);
}
public async Task<WorkflowInstance> GetByIdAsync(string workflowInstanceId, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable().FirstOrDefaultAsync(instance => instance.WorkflowInstanceId == workflowInstanceId);
}
public Task<bool> IsWorkflowIsAlreadyExecutingAsync(string? tenantId, string workflowDefinitionId, CancellationToken cancellationToken = default)
{
return _workflowInstances
.AsQueryable().AnyAsync(instance => instance.WorkflowDefinitionId == workflowDefinitionId
&& (instance.Status == WorkflowStatus.Running || instance.Status == WorkflowStatus.Suspended)
&& instance.TenantId == tenantId);
}
public async Task<IEnumerable<WorkflowInstance>> ListAsync(int page, int pageSize, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable().Skip(page * pageSize).Take(pageSize).ToListAsync();
}
public async Task<IEnumerable<WorkflowInstance>> ListByBlockingActivityTypeAsync(string activityType, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable().Where(instance => instance.BlockingActivities.Any(a => a.ActivityType == activityType)).ToListAsync();
}
public async Task<IEnumerable<WorkflowInstance>> ListByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable()
.Where(instance => instance.CorrelationId == correlationId && instance.Status == status).ToListAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(string workflowDefinitionId, WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return ListByDefinitionAndStatusAsync(workflowDefinitionId, default, workflowStatus, cancellationToken);
}
public async Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(string workflowDefinitionId, string? tenantId, WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable()
.Where(instance => instance.WorkflowDefinitionId == workflowDefinitionId && instance.Status == workflowStatus
&& instance.TenantId == tenantId).ToListAsync();
}
public async Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync(string workflowDefinitionId, string? tenantId, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable().Where(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId).ToListAsync();
}
public async Task<IEnumerable<WorkflowInstance>> ListByStatusAsync(WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return await _workflowInstances
.AsQueryable()
.Where(instance => instance.Status == workflowStatus).ToListAsync();
}
public async Task SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
if(workflowInstance.Id == 0)
{
// If there is no instance yet, max throws an error
if (await _workflowInstances.AsQueryable().AnyAsync())
{
workflowInstance.Id = await _workflowInstances.AsQueryable().MaxAsync(x => x.Id) + 1;
} else
{
workflowInstance.Id = 1;
}
}
var filter = GetFilterWorkflowId(workflowInstance.Id);
await _workflowInstances.ReplaceOneAsync(filter, workflowInstance, new ReplaceOptions { IsUpsert = true });
await _mediator.Publish(new WorkflowInstanceSaved(workflowInstance), cancellationToken);
}
private FilterDefinition<WorkflowInstance> GetFilterWorkflowId(int id) => Builders<WorkflowInstance>.Filter.Where(x => x.Id == id);
}
}

View file

@ -0,0 +1,52 @@
using System;
using MongoDB.Bson.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NodaTime;
using NodaTime.Serialization.JsonNet;
namespace Elsa.Persistence.MongoDb.Serializers
{
public class JsonSerializer : IBsonSerializer<JObject>
{
public static JsonSerializer Instance { get; } = new JsonSerializer();
private readonly JsonSerializerSettings serializerSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
}.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
public System.Type ValueType => typeof(JObject);
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
Serialize(context, args, (JObject)value);
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, JObject value)
{
if ((value is JObject jObject) == false)
{
throw new ArgumentNullException(nameof(value));
}
var json = JsonConvert.SerializeObject(value, serializerSettings);
context.Writer.WriteString(json);
}
object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return Deserialize(context, args);
}
public JObject Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var jObjectStr = context.Reader.ReadString();
return JsonConvert.DeserializeObject<JObject>(jObjectStr, serializerSettings);
}
}
}

View file

@ -0,0 +1,59 @@
using System;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using NodaTime.Text;
namespace Elsa.Persistence.MongoDb.Serializers
{
public class NodaTimeSerializer : IBsonSerializer<NodaTime.Instant>
{
public static NodaTimeSerializer Instance { get; } = new NodaTimeSerializer();
public Type ValueType => typeof(NodaTime.Instant);
object IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
return Deserialize(context, args);
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, NodaTime.Instant value)
{
if (value == null)
throw new ArgumentNullException(nameof(value));
context.Writer.WriteString(InstantPattern.CreateWithInvariantCulture("g").Format(value));
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
Serialize(context, args, (NodaTime.Instant)value);
}
public NodaTime.Instant Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var bsonType = context.Reader.GetCurrentBsonType();
if (bsonType != BsonType.String)
{
throw new InvalidOperationException($"Cannot deserialize NodaTime.Instant from BsonType {bsonType}.");
}
var nodaTimeString = context.Reader.ReadString();
var parseResult = InstantPattern.CreateWithInvariantCulture("g").Parse(nodaTimeString);
if (!parseResult.Success)
{
throw parseResult.Exception;
}
return parseResult.Value;
}
}
}

View file

@ -0,0 +1,48 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Persistence.MongoDb.Serializers;
using Elsa.Services;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
namespace Elsa.Persistence.MongoDb.Services
{
public class DatabaseInitializer : IStartupTask
{
private readonly ElsaMongoDbClient _workflowEngineMongoDbClient;
public DatabaseInitializer(ElsaMongoDbClient workflowEngineMongoDbClient)
{
_workflowEngineMongoDbClient = workflowEngineMongoDbClient;
}
/// <summary>
/// Create Indexies
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async Task ExecuteAsync(CancellationToken cancellationToken = default)
{
await CreateWorkflowInstancesIndexies(cancellationToken);
await CreateWorkflowDefinitionsIndexies(cancellationToken);
}
private async Task CreateWorkflowInstancesIndexies(CancellationToken cancellationToken)
{
var indexKeysDefinition = Builders<WorkflowInstance>.IndexKeys.Ascending(x => x.WorkflowInstanceId);
await _workflowEngineMongoDbClient.WorkflowInstances.Indexes.CreateOneAsync(new CreateIndexModel<WorkflowInstance>(indexKeysDefinition),cancellationToken: cancellationToken);
}
private async Task CreateWorkflowDefinitionsIndexies(CancellationToken cancellationToken)
{
var indexKeysDefinition = Builders<WorkflowDefinition>.IndexKeys.Ascending(x => x.WorkflowDefinitionId).Descending(x => x.Version);
await _workflowEngineMongoDbClient.WorkflowDefinitions.Indexes.CreateOneAsync(new CreateIndexModel<WorkflowDefinition>(indexKeysDefinition), cancellationToken: cancellationToken);
}
}
}

View file

@ -0,0 +1,64 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Persistence.MongoDb.Serializers;
using Elsa.Services;
using MongoDB.Bson.Serialization;
namespace Elsa.Persistence.MongoDb.Services
{
public static class DatabaseRegister
{
public static void RegisterMapsAndSerializers()
{
// In unit tests, the method is called several times, which throws an exception because the entity is already registered
// If an error is thrown, the remaining registrations are no longer processed
var firstPass = Map();
if(firstPass == false)
{
return;
}
RegisterSerializers();
}
private static bool Map()
{
if (BsonClassMap.IsClassMapRegistered(typeof(WorkflowDefinition)))
{
return false;
}
try
{
BsonClassMap.RegisterClassMap<WorkflowDefinition>(cm =>
{
cm.AutoMap();
cm.MapIdMember(x => x.Id);
});
BsonClassMap.RegisterClassMap<WorkflowInstance>(cm =>
{
cm.AutoMap();
cm.MapIdMember(x => x.Id);
});
}
catch (Exception) {
return false;
}
return true;
}
private static void RegisterSerializers()
{
BsonSerializer.RegisterSerializer(JsonSerializer.Instance);
BsonSerializer.RegisterSerializer(NodaTimeSerializer.Instance);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View file

@ -1,11 +1,14 @@
using System;
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using NodaTime;
using NodaTime.Serialization.JsonNet;
using YesSql;
namespace Elsa.Data.Services
namespace Elsa.Persistence.YesSql
{
public class CustomJsonContentSerializer : IContentSerializer
{
@ -32,4 +35,4 @@ namespace Elsa.Data.Services
public dynamic? DeserializeDynamic(string content) => JsonConvert.DeserializeObject<dynamic>(content, JsonSettings);
public string Serialize(object item) => JsonConvert.SerializeObject(item, JsonSettings);
}
}
}

View file

@ -1,6 +1,6 @@
using YesSql.Sql;
using YesSql.Sql;
namespace Elsa.Data
namespace Elsa.Persistence.YesSql.Data
{
/// <summary>
/// Represents a database migration.
@ -9,4 +9,4 @@ namespace Elsa.Data
{
public ISchemaBuilder SchemaBuilder { get; set; } = default!;
}
}
}

View file

@ -1,6 +1,6 @@
using YesSql.Sql;
using YesSql.Sql;
namespace Elsa.Data
namespace Elsa.Persistence.YesSql.Data
{
/// <summary>
/// Represents a contract for a database migration.
@ -12,4 +12,4 @@ namespace Elsa.Data
/// </summary>
ISchemaBuilder SchemaBuilder { get; set; }
}
}
}

View file

@ -1,6 +1,6 @@
using YesSql.Indexes;
using YesSql.Indexes;
namespace Elsa.Data
namespace Elsa.Persistence.YesSql.Data
{
/// <summary>
/// Represents a contract that used to denote an <see cref="IIndexProvider"/> that needs to be resolved by the DI and registered
@ -9,4 +9,4 @@ namespace Elsa.Data
public interface IScopedIndexProvider : IIndexProvider
{
}
}
}

View file

@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<RootNamespace>Elsa.Persistence.YesSql</RootNamespace>
<PackageVersion>1.0.0</PackageVersion>
<Authors>Elsa Contributors</Authors>
<Description>
Elsa is a set of workflow libraries and tools that enable super-fast workflowing capabilities in any .NET Core application.
This package provides a YesSql persistence provider.
</Description>
<Copyright>2020</Copyright>
<PackageProjectUrl>https://github.com/elsa-workflows/elsa-core</PackageProjectUrl>
<RepositoryUrl>https://github.com/elsa-workflows/elsa-core</RepositoryUrl>
<RepositoryType>GitHub</RepositoryType>
<PackageTags>elsa, workflows, orchard</PackageTags>
<PackageIcon>icon.png</PackageIcon>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Include="icon.png">
<Pack>True</Pack>
<PackagePath />
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="YesSql.Core" Version="2.0.0-beta-1637" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\core\Elsa.Core\Elsa.Core.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,72 @@
using System;
using System.Linq;
using Elsa.Data;
using Elsa.Data.Services;
using Elsa.Persistence.YesSql.Data;
using Elsa.Persistence.YesSql.Indexes;
using Elsa.Persistence.YesSql.Services;
using Elsa.Repositories;
using Elsa.Runtime;
using Elsa.WorkflowProviders;
using Microsoft.Extensions.DependencyInjection;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Persistence.YesSql
{
public static class IServiceCollectionExtensions
{
public static IServiceCollection AddElsaPersistenceYesSql(this IServiceCollection services, Action<IServiceProvider, IConfiguration> configure)
{
// Scoped, because IMediator is registered as Scoped and IIdGenerator could also be registered as Scoped
services.AddScoped<IWorkflowDefinitionRepository, YesSqlWorkflowDefinitionRepository>()
.AddScoped<IWorkflowInstanceRepository, YesSqlWorkflowInstanceRepository>()
.AddWorkflowProvider<DatabaseWorkflowProvider>()
.AddSingleton(sp => CreateStore(sp, configure))
.AddScoped(CreateSession)
.AddScoped<IDataMigrationManager, DataMigrationManager>()
.AddStartupTask<DatabaseInitializer>()
.AddStartupTask<DataMigrationsRunner>()
.AddDataMigration<Migrations>()
.AddIndexProvider<WorkflowDefinitionIndexProvider>()
.AddIndexProvider<WorkflowInstanceIndexProvider>();
return services;
}
public static IServiceCollection AddIndexProvider<T>(this IServiceCollection services) where T : class, IIndexProvider => services.AddSingleton<IIndexProvider, T>();
public static IServiceCollection AddScopedIndexProvider<T>(this IServiceCollection services) where T : class, IIndexProvider => services.AddScoped<IScopedIndexProvider>();
public static IServiceCollection AddDataMigration<T>(this IServiceCollection services) where T : class, IDataMigration => services.AddScoped<IDataMigration, T>();
private static IStore CreateStore(
IServiceProvider serviceProvider,
Action<IServiceProvider, Configuration> configure)
{
var configuration = new Configuration { ContentSerializer = new CustomJsonContentSerializer() };
configure(serviceProvider, configuration);
// TODO: The following line is a temporary workaround until the bug in YesSql is fixed: https://github.com/sebastienros/yessql/pull/280
var store = StoreFactory.CreateAndInitializeAsync(configuration).GetAwaiter().GetResult();
//var store = StoreFactory.Create(configuration);
var indexes = serviceProvider.GetServices<IIndexProvider>();
store.RegisterIndexes(indexes);
return store;
}
private static ISession CreateSession(IServiceProvider serviceProvider)
{
var store = serviceProvider.GetRequiredService<IStore>();
var session = store.CreateSession();
var scopedServices = serviceProvider.GetServices<IScopedIndexProvider>().Cast<IIndexProvider>().ToArray();
session.RegisterIndexes(scopedServices);
return session;
}
}
}

View file

@ -1,8 +1,9 @@
using Elsa.Data;
using Elsa.Data;
using Elsa.Models;
using YesSql.Indexes;
namespace Elsa.Indexes
namespace Elsa.Persistence.YesSql.Indexes
{
public class WorkflowDefinitionIndex : MapIndex
{
@ -14,7 +15,7 @@ namespace Elsa.Indexes
public bool IsPublished { get; set; }
public bool IsEnabled { get; set; }
}
public class WorkflowDefinitionIndexProvider : IndexProvider<WorkflowDefinition>
{
public WorkflowDefinitionIndexProvider() => CollectionName = CollectionNames.WorkflowDefinitions;
@ -36,4 +37,4 @@ namespace Elsa.Indexes
);
}
}
}
}

View file

@ -1,10 +1,12 @@
using System;
using System.Linq;
using Elsa.Data;
using Elsa.Models;
using YesSql.Indexes;
namespace Elsa.Indexes
namespace Elsa.Persistence.YesSql.Indexes
{
public class WorkflowInstanceIndex : MapIndex
{
@ -50,7 +52,7 @@ namespace Elsa.Indexes
{
if (workflowInstance.Status != WorkflowStatus.Suspended || !workflowInstance.BlockingActivities.Any())
return default;
return workflowInstance.BlockingActivities
.Select(
activity => new WorkflowInstanceBlockingActivitiesIndex
@ -65,4 +67,4 @@ namespace Elsa.Indexes
});
}
}
}
}

View file

@ -1,9 +1,11 @@
using System.Data;
using System.Data;
using Elsa.Data;
using Elsa.Indexes;
using Elsa.Persistence.YesSql.Data;
using Elsa.Persistence.YesSql.Indexes;
using YesSql.Sql;
namespace Elsa
namespace Elsa.Persistence.YesSql
{
public class Migrations : DataMigration
{

View file

@ -3,13 +3,18 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Elsa.Data;
using Elsa.Data.Documents;
using Elsa.Extensions;
using Elsa.Persistence.YesSql.Data;
using Microsoft.Extensions.Logging;
using YesSql;
using YesSql.Sql;
namespace Elsa.Data.Services
namespace Elsa.Persistence.YesSql.Services
{
/// <summary>
/// Represents a class that manages the database migrations.
@ -241,4 +246,4 @@ namespace Elsa.Data.Services
return returnType != null && (returnType == typeof(Task<int>) || returnType == typeof(int)) ? methodInfo : null;
}
}
}
}

View file

@ -1,9 +1,15 @@
using System.Threading;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Data;
using Elsa.Services;
using YesSql;
namespace Elsa.Data.Services
namespace Elsa.Persistence.YesSql.Services
{
public class DatabaseInitializer : IStartupTask
{
@ -13,11 +19,11 @@ namespace Elsa.Data.Services
{
_store = store;
}
public async Task ExecuteAsync(CancellationToken cancellationToken = default)
{
await _store.InitializeCollectionAsync(CollectionNames.WorkflowDefinitions);
await _store.InitializeCollectionAsync(CollectionNames.WorkflowInstances);
}
}
}
}

View file

@ -1,22 +1,25 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Data;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Persistence.YesSql.Indexes;
using Elsa.Repositories;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Services
namespace Elsa.Persistence.YesSql
{
public class WorkflowDefinitionManager : IWorkflowDefinitionManager
public class YesSqlWorkflowDefinitionRepository : IWorkflowDefinitionRepository
{
private readonly ISession _session;
private readonly IIdGenerator _idGenerator;
private readonly Elsa.Services.IIdGenerator _idGenerator;
public WorkflowDefinitionManager(ISession session, IIdGenerator idGenerator)
public YesSqlWorkflowDefinitionRepository(ISession session, Elsa.Services.IIdGenerator idGenerator)
{
_session = session;
_idGenerator = idGenerator;
@ -36,20 +39,19 @@ namespace Elsa.Services
}
public async Task<int> CountAsync(VersionOptions? version = default, CancellationToken cancellationToken = default) =>
await Query()
.WithVersion(version ?? VersionOptions.Latest)
await WithVersion(Query(), version ?? VersionOptions.Latest)
.CountAsync();
public async Task<IEnumerable<WorkflowDefinition>> ListAsync(int? skip = default, int? take = default, VersionOptions? version = default, CancellationToken cancellationToken = default)
{
var query = Query().WithVersion(version ?? VersionOptions.Latest);
var query = WithVersion(Query(), version ?? VersionOptions.Latest);
if (skip != null)
query = query.Skip(skip.Value);
if (take != null)
query = query.Take(take.Value);
return await query.ListAsync();
}
@ -71,5 +73,42 @@ namespace Elsa.Services
return workflowDefinition;
}
public Task<WorkflowDefinition> GetAsync(string workflowDefinitionId, VersionOptions version, CancellationToken cancellationToken = default)
{
var query = Query<WorkflowDefinitionIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId);
return WithVersion(query, version).FirstOrDefaultAsync();
}
public Task<WorkflowDefinition> GetByVersionIdAsync(string workflowDefinitionVersionId, CancellationToken cancellationToken = default)
{
return Query<WorkflowDefinitionIndex>(x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId).FirstOrDefaultAsync();
}
private IQuery<WorkflowDefinition> WithVersion(IQuery<WorkflowDefinition> query,
VersionOptions version)
{
var index = query.With<WorkflowDefinitionIndex>();
if (version.IsDraft)
query = index.Where(x => !x.IsPublished);
else if (version.IsLatest)
query = index.Where(x => x.IsLatest);
else if (version.IsPublished)
query = index.Where(x => x.IsPublished);
else if (version.IsLatestOrPublished)
query = index.Where(x => x.IsPublished || x.IsLatest);
else if (version.AllVersions)
{
// Nothing to filter.
}
else if (version.Version > 0)
query = index.Where(x => x.Version == version.Version);
return index.OrderByDescending(x => x.Version);
}
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Data;
using Elsa.Events;
using Elsa.Models;
using Elsa.Persistence.YesSql.Indexes;
using Elsa.Repositories;
using MediatR;
using YesSql;
using YesSql.Indexes;
namespace Elsa.Persistence.YesSql
{
public class YesSqlWorkflowInstanceRepository : IWorkflowInstanceRepository
{
private readonly ISession _session;
private readonly IMediator _mediator;
public YesSqlWorkflowInstanceRepository(ISession session, IMediator mediator)
{
_session = session;
_mediator = mediator;
}
public async Task SaveAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
_session.Save(workflowInstance, CollectionNames.WorkflowInstances);
await _session.CommitAsync();
await _mediator.Publish(new WorkflowInstanceSaved(workflowInstance), cancellationToken);
}
public async Task DeleteAsync(WorkflowInstance workflowInstance, CancellationToken cancellationToken = default)
{
_session.Delete(workflowInstance, CollectionNames.WorkflowInstances);
await _session.CommitAsync();
await _mediator.Publish(new WorkflowInstanceDeleted(workflowInstance), cancellationToken);
}
public async Task<bool> IsWorkflowIsAlreadyExecutingAsync(string? tenantId, string workflowDefinitionId, CancellationToken cancellationToken = default)
{
var instance = await Query<WorkflowInstanceIndex>(index => index.WorkflowDefinitionId == workflowDefinitionId && index.TenantId == tenantId && (index.WorkflowStatus == WorkflowStatus.Running || index.WorkflowStatus == WorkflowStatus.Suspended))
.FirstOrDefaultAsync();
return instance != null;
}
public Task<WorkflowInstance> GetByIdAsync(string workflowInstanceId, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.WorkflowInstanceId == workflowInstanceId).FirstOrDefaultAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListAsync(int page, int pageSize, CancellationToken cancellationToken = default) {
return Query<WorkflowInstanceIndex>().Skip(page * pageSize).Take(pageSize).ListAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByBlockingActivityTypeAsync(string activityType, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceBlockingActivitiesIndex>(x => x.ActivityType == activityType).ListAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByDefinitionAndStatusAsync(string workflowDefinitionId, string? tenantId, WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId && x.WorkflowStatus == workflowStatus).ListAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByStatusAsync(WorkflowStatus workflowStatus, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.WorkflowStatus == workflowStatus).ListAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByDefinitionAsync( string workflowDefinitionId,string? tenantId,CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.WorkflowDefinitionId == workflowDefinitionId && x.TenantId == tenantId).ListAsync();
}
public Task<WorkflowInstance?> GetByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.CorrelationId == correlationId && x.WorkflowStatus == status).FirstOrDefaultAsync();
}
public Task<IEnumerable<WorkflowInstance>> ListByCorrelationIdAsync(string correlationId, WorkflowStatus status, CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>(x => x.CorrelationId == correlationId && x.WorkflowStatus == status).ListAsync();
}
public Task<int> CountAsync(CancellationToken cancellationToken = default)
{
return Query<WorkflowInstanceIndex>().CountAsync();
}
private IQuery<WorkflowInstance, TIndex> Query<TIndex>() where TIndex : class, IIndex => _session.Query<WorkflowInstance, TIndex>(CollectionNames.WorkflowInstances);
private IQuery<WorkflowInstance, TIndex> Query<TIndex>(Expression<Func<TIndex, bool>> predicate) where TIndex : class, IIndex => _session.Query<WorkflowInstance, TIndex>(predicate, CollectionNames.WorkflowInstances);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View file

@ -6,8 +6,13 @@
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="YesSql.Provider.Sqlite" Version="1.0.0-beta-1637" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.YesSql\Elsa.Persistence.YesSql.csproj" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,5 @@
using Elsa.Data;
using Elsa.Data;
using Elsa.Persistence.YesSql.Data;
using Elsa.Samples.ContextualWorkflowHttp.Indexes;
using YesSql.Sql;

View file

@ -1,8 +1,11 @@
using Elsa.Samples.ContextualWorkflowHttp.Indexes;
using Elsa.Samples.ContextualWorkflowHttp.WorkflowContextProviders;
using Elsa.Samples.ContextualWorkflowHttp.Workflows;
using Elsa.Persistence.YesSql;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using YesSql.Provider.Sqlite;
using System.Data;
namespace Elsa.Samples.ContextualWorkflowHttp
{
@ -12,6 +15,7 @@ namespace Elsa.Samples.ContextualWorkflowHttp
{
services
.AddElsa()
.AddElsaPersistenceYesSql((sp, config) => config.UseSqLite("Data Source=elsa.db;Cache=Shared", IsolationLevel.ReadUncommitted))
.AddHttpActivities()
.AddConsoleActivities()
.AddDataMigration<Migrations>()

View file

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,3 +1,4 @@
using Elsa.Persistence.InMemory;
using Elsa.Samples.CorrelationHttp.Workflows;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
@ -10,6 +11,7 @@ namespace Elsa.Samples.CorrelationHttp
{
services
.AddElsa()
.AddElsaPersistenceInMemory()
.AddHttpActivities()
.AddConsoleActivities()
.AddWorkflow<RegistrationWorkflow>();

View file

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,6 +1,7 @@
using Elsa.Persistence.InMemory;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using YesSql.Provider.Sqlite;
namespace Elsa.Samples.CustomActivities
{
@ -9,7 +10,8 @@ namespace Elsa.Samples.CustomActivities
public void ConfigureServices(IServiceCollection services)
{
services
.AddElsa(option => option.UsePersistence(db => db.UseSqLite("Data Source=elsa.db;Cache=Shared")))
.AddElsa()
.AddElsaPersistenceInMemory()
.AddHttpActivities()
.AddActivity<ReadQueryString>()
.AddWorkflow<EchoQueryStringWorkflow>();

View file

@ -6,6 +6,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj"/>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,3 +1,4 @@
using Elsa.Persistence.InMemory;
using Elsa.Samples.ForkJoinTimerAndSignalHttp.BackgroundTasks;
using Elsa.Samples.ForkJoinTimerAndSignalHttp.Workflows;
using Microsoft.AspNetCore.Builder;
@ -14,6 +15,7 @@ namespace Elsa.Samples.ForkJoinTimerAndSignalHttp
services
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddTimerActivities()
.AddHostedService<WorkflowStarter<DemoWorkflow>>()

View file

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,3 +1,5 @@
using Elsa.Persistence.InMemory;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
@ -9,6 +11,7 @@ namespace Elsa.Samples.HelloWorldHttp
{
services
.AddElsa()
.AddElsaPersistenceInMemory()
.AddHttpActivities()
.AddWorkflow<HelloHttpWorkflow>();
}

View file

@ -1,6 +1,7 @@
using Elsa.Activities.Timers;
using Elsa.Activities.Timers;
using Elsa.Activities.Timers.Services;
using Elsa.Attributes;
using Elsa.Repositories;
using Elsa.Services;
using NodaTime;
@ -9,7 +10,7 @@ namespace Elsa.Samples.Interrupts.Activities
[Activity]
public class Sleep : Timer
{
public Sleep(IWorkflowInstanceManager workflowInstanceManager, IWorkflowScheduler workflowScheduler, IClock clock) : base(clock)
public Sleep(IWorkflowInstanceRepository workflowInstanceRepository, IWorkflowScheduler workflowScheduler, IClock clock) : base(clock)
{
}
}

View file

@ -8,6 +8,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,3 +1,4 @@
using Elsa.Persistence.InMemory;
using Elsa.Samples.Interrupts.Activities;
using Elsa.Samples.Interrupts.Workflows;
using Microsoft.AspNetCore.Builder;
@ -14,6 +15,7 @@ namespace Elsa.Samples.Interrupts
services
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddHttpActivities()
.AddTimerActivities()

View file

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,7 +1,7 @@
using Elsa.Persistence.InMemory;
using Elsa.Samples.ReadModelHttp.Workflows;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using YesSql.Provider.Sqlite;
namespace Elsa.Samples.ReadModelHttp
{
@ -10,7 +10,8 @@ namespace Elsa.Samples.ReadModelHttp
public void ConfigureServices(IServiceCollection services)
{
services
.AddElsa(option => option.UsePersistence(db => db.UseSqLite("Data Source=elsa.db;Cache=Shared")))
.AddElsa()
.AddElsaPersistenceInMemory()
.AddHttpActivities()
.AddConsoleActivities()
.AddWorkflow<SaveContactWorkflow>();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,5 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Models;
using Elsa.Persistence.InMemory;
using Elsa.Scripting.Liquid.Services;
using Elsa.Serialization;
using Elsa.Services;
@ -17,6 +18,7 @@ namespace Elsa.Samples.DeclarativeCompositeActivitiesConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.BuildServiceProvider();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
<ItemGroup>

View file

@ -1,7 +1,8 @@
using System.IO;
using System.IO;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Models;
using Elsa.Persistence.InMemory;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
using Storage.Net;
@ -21,6 +22,7 @@ namespace Elsa.Samples.FileBasedWorkflow
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa(options => options.UseStorage(() => StorageFactory.Blobs.DirectoryFiles(currentDirectory)))
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.BuildServiceProvider();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Persistence.InMemory;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
@ -14,6 +16,7 @@ namespace Elsa.Samples.ForLoopConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddWorkflow<LoopingWorkflow>()
.BuildServiceProvider();

View file

@ -13,6 +13,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Persistence.InMemory;
using Elsa.Samples.GoBackConsole.Activities;
using Elsa.Samples.GoBackConsole.Workflows;
using Elsa.Services;
@ -16,6 +18,7 @@ namespace Elsa.Samples.GoBackConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddActivity<BrickWallActivity>()
.AddWorkflow<WalkAroundWorkflow>()

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,5 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Extensions;
using Elsa.Persistence.InMemory;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
@ -12,6 +13,7 @@ namespace Elsa.Samples.HelloWorldConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddWorkflow<HelloWorld>()
.AddAutoMapperProfiles<Program>()

View file

@ -13,6 +13,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Persistence.InMemory;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
@ -14,6 +16,7 @@ namespace Elsa.Samples.IfElseConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddWorkflow<HappinessWorkflow>()
.BuildServiceProvider();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,4 +1,6 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Persistence.InMemory;
using Elsa.Samples.ProgrammaticCompositeActivitiesConsole.Activities;
using Elsa.Samples.ProgrammaticCompositeActivitiesConsole.Workflows;
using Elsa.Services;
@ -13,6 +15,7 @@ namespace Elsa.Samples.ProgrammaticCompositeActivitiesConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.AddActivity<CountDownActivity>()
.AddWorkflow<CompositionWorkflow>()

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,6 +1,7 @@
using System.Threading.Tasks;
using System.Threading.Tasks;
using Elsa.Activities.Console;
using Elsa.Builders;
using Elsa.Persistence.InMemory;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
@ -13,6 +14,7 @@ namespace Elsa.Samples.ReadLineEchoConsole
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.BuildServiceProvider();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

View file

@ -1,7 +1,8 @@
using System;
using System;
using System.Threading.Tasks;
using Elsa.Activities.Console;
using Elsa.Models;
using Elsa.Persistence.InMemory;
using Elsa.Scripting.Liquid.Services;
using Elsa.Serialization;
using Elsa.Services;
@ -23,6 +24,7 @@ namespace Elsa.Samples.Serialization
// Create a service container with Elsa services.
var services = new ServiceCollection()
.AddElsa()
.AddElsaPersistenceInMemory()
.AddConsoleActivities()
.BuildServiceProvider();

View file

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Persistence.InMemory\Elsa.Persistence.InMemory.csproj" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show more