Browse Source

Add `IApplicationConfigurationContributor` to DI automatically.

IApplicationConfigurationContributor
maliming 2 years ago
parent
commit
fbe1c108fc
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 5
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationOptions.cs
  2. 21
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
  3. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
  4. 5
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
  5. 3
      framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/TestApplicationConfigurationContributor.cs

5
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationOptions.cs

@ -1,13 +1,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using Volo.Abp.Collections;
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
public class AbpApplicationConfigurationOptions public class AbpApplicationConfigurationOptions
{ {
public List<IApplicationConfigurationContributor> Contributors { get; } public ITypeList<IApplicationConfigurationContributor> Contributors { get; }
public AbpApplicationConfigurationOptions() public AbpApplicationConfigurationOptions()
{ {
Contributors = new List<IApplicationConfigurationContributor>(); Contributors = new TypeList<IApplicationConfigurationContributor>();
} }
} }

21
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs

@ -26,6 +26,7 @@ using Volo.Abp.ApiVersioning;
using Volo.Abp.Application; using Volo.Abp.Application;
using Volo.Abp.AspNetCore.Mvc.AntiForgery; using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.AspNetCore.Mvc.ApiExploring; using Volo.Abp.AspNetCore.Mvc.ApiExploring;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.AspNetCore.Mvc.ApplicationModels; using Volo.Abp.AspNetCore.Mvc.ApplicationModels;
using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.AspNetCore.Mvc.Conventions;
using Volo.Abp.AspNetCore.Mvc.DataAnnotations; using Volo.Abp.AspNetCore.Mvc.DataAnnotations;
@ -69,6 +70,8 @@ public class AbpAspNetCoreMvcModule : AbpModule
DynamicProxyIgnoreTypes.Add<ViewComponent>(); DynamicProxyIgnoreTypes.Add<ViewComponent>();
context.Services.AddConventionalRegistrar(new AbpAspNetCoreMvcConventionalRegistrar()); context.Services.AddConventionalRegistrar(new AbpAspNetCoreMvcConventionalRegistrar());
AutoAddApplicationConfigurationContributors(context.Services);
} }
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
@ -277,4 +280,22 @@ public class AbpAspNetCoreMvcModule : AbpModule
partManager.ApplicationParts.AddIfNotContains(moduleAssembly); partManager.ApplicationParts.AddIfNotContains(moduleAssembly);
} }
} }
private static void AutoAddApplicationConfigurationContributors(IServiceCollection services)
{
var contributorTypes = new List<Type>();
services.OnRegistered(context =>
{
if (typeof(IApplicationConfigurationContributor).IsAssignableFrom(context.ImplementationType))
{
contributorTypes.Add(context.ImplementationType);
}
});
services.Configure<AbpApplicationConfigurationOptions>(options =>
{
options.Contributors.AddIfNotContains(contributorTypes);
});
}
} }

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs

@ -112,7 +112,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp
var context = new ApplicationConfigurationContributorContext(scope.ServiceProvider, result); var context = new ApplicationConfigurationContributorContext(scope.ServiceProvider, result);
foreach (var contributor in _options.Contributors) foreach (var contributor in _options.Contributors)
{ {
await contributor.ContributeAsync(context); await scope.ServiceProvider.GetRequiredService(contributor).As<IApplicationConfigurationContributor>().ContributeAsync(context);
} }
} }
} }

5
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs

@ -132,11 +132,6 @@ public class AbpAspNetCoreMvcTestModule : AbpModule
options.Maps.Add("SerialNumber", () => ClaimTypes.SerialNumber); options.Maps.Add("SerialNumber", () => ClaimTypes.SerialNumber);
options.Maps.Add("DateOfBirth", () => ClaimTypes.DateOfBirth); options.Maps.Add("DateOfBirth", () => ClaimTypes.DateOfBirth);
}); });
Configure<AbpApplicationConfigurationOptions>(options =>
{
options.Contributors.Add(new TestApplicationConfigurationContributor());
});
} }
public override void OnApplicationInitialization(ApplicationInitializationContext context) public override void OnApplicationInitialization(ApplicationInitializationContext context)

3
framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/TestApplicationConfigurationContributor.cs

@ -1,9 +1,10 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Data; using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
public class TestApplicationConfigurationContributor : IApplicationConfigurationContributor public class TestApplicationConfigurationContributor : IApplicationConfigurationContributor, ITransientDependency
{ {
public Task ContributeAsync(ApplicationConfigurationContributorContext context) public Task ContributeAsync(ApplicationConfigurationContributorContext context)
{ {

Loading…
Cancel
Save