using Elsa.Common.Extensions; using Elsa.Common.Features; using Elsa.Features.Abstractions; using Elsa.Features.Attributes; using Elsa.Features.Services; using Elsa.Identity.Entities; using Elsa.Identity.HostedServices; using Elsa.Identity.Implementations; using Elsa.Identity.Options; using Elsa.Identity.Services; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Identity.Features; [DependsOn(typeof(SystemClockFeature))] public class IdentityFeature : FeatureBase { public IdentityFeature(IModule module) : base(module) { } public bool CreateDefaultUser { get; set; } public Action? IdentityOptions { get; set; } public Func UserStore { get; set; } = sp => sp.GetRequiredService(); public Func RoleStore { get; set; } = sp => sp.GetRequiredService(); public override void ConfigureHostedServices() { if(CreateDefaultUser) Module.ConfigureHostedService(); } public override void Apply() { Services.Configure(IdentityOptions); Services .AddMemoryStore() .AddMemoryStore() .AddSingleton(UserStore) .AddSingleton(RoleStore) .AddSingleton() .AddSingleton() .AddSingleton() ; } }