Register IConfiguration if not present

Fixes #1242
This commit is contained in:
Sipke Schoorstra 2021-07-12 13:03:26 +02:00
parent e3f62fc8ea
commit e25170451b
2 changed files with 15 additions and 4 deletions

View file

@ -29,6 +29,7 @@
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.6" />

View file

@ -35,6 +35,7 @@ using Elsa.Services.Workflows;
using Elsa.Services.WorkflowStorage;
using Elsa.StartupTasks;
using MediatR;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Newtonsoft.Json;
using NodaTime;
@ -80,6 +81,7 @@ namespace Microsoft.Extensions.DependencyInjection
optionsBuilder
.AddWorkflowsCore()
.AddConfiguration()
.AddCoreActivities();
services.Decorate<IWorkflowDefinitionStore, InitializingWorkflowDefinitionStore>();
@ -276,12 +278,20 @@ namespace Microsoft.Extensions.DependencyInjection
return options;
}
private static ElsaOptionsBuilder AddCoreActivities(this ElsaOptionsBuilder services)
private static ElsaOptionsBuilder AddConfiguration(this ElsaOptionsBuilder options)
{
if (!services.WithCoreActivities)
return services;
// When using Elsa in console apps, no configuration will be registered by default, but some Elsa services depend on this service (even when there is nothing configured).
options.Services.TryAdd(new ServiceDescriptor(typeof(IConfiguration), _ => new ConfigurationBuilder().AddInMemoryCollection().Build(), ServiceLifetime.Singleton));
return services
return options;
}
private static ElsaOptionsBuilder AddCoreActivities(this ElsaOptionsBuilder options)
{
if (!options.WithCoreActivities)
return options;
return options
.AddActivitiesFrom<ElsaOptions>()
.AddActivitiesFrom<CompositeActivity>();
}