5 changed files with 98 additions and 0 deletions
@ -0,0 +1,9 @@ |
|||
// Global using directives
|
|||
|
|||
global using Microsoft.Extensions.DependencyInjection; |
|||
global using Microsoft.Extensions.Hosting; |
|||
global using Volo.Abp; |
|||
global using Volo.Abp.Autofac; |
|||
global using Volo.Abp.DependencyInjection; |
|||
global using Volo.Abp.Modularity; |
|||
global using Volo.Abp.Threading; |
|||
@ -0,0 +1,14 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net7.0</TargetFramework> |
|||
<ImplicitUsings>enable</ImplicitUsings> |
|||
<AssemblyName>Lion.AbpPro.Starter</AssemblyName> |
|||
<RootNamespace /> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Autofac" /> |
|||
<PackageReference Include="Volo.Abp.Threading" /> |
|||
</ItemGroup> |
|||
</Project> |
|||
@ -0,0 +1,62 @@ |
|||
namespace Lion.AbpPro.Starter; |
|||
|
|||
[DependsOn( |
|||
typeof(AbpAutofacModule), |
|||
typeof(AbpThreadingModule))] |
|||
public class AbpProStarterModule : AbpModule |
|||
{ |
|||
private readonly CancellationTokenSource _cancellationTokenSource = new(); |
|||
|
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
} |
|||
|
|||
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
|||
{ |
|||
AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); |
|||
} |
|||
|
|||
public override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) |
|||
{ |
|||
Run(context); |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
public override Task OnApplicationShutdownAsync(ApplicationShutdownContext context) |
|||
{ |
|||
_cancellationTokenSource.Cancel(); |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
private void Run(ApplicationInitializationContext context) |
|||
{ |
|||
var rootServiceProvider = context.ServiceProvider.GetRequiredService<IRootServiceProvider>(); |
|||
Task.Run(async () => |
|||
{ |
|||
using var scope = rootServiceProvider.CreateScope(); |
|||
var applicationLifetime = scope.ServiceProvider.GetService<IHostApplicationLifetime>(); |
|||
var cancellationTokenProvider = scope.ServiceProvider.GetRequiredService<ICancellationTokenProvider>(); |
|||
var cancellationToken = applicationLifetime?.ApplicationStopping ?? _cancellationTokenSource.Token; |
|||
var contributors = scope.ServiceProvider.GetRequiredService<IEnumerable<IAbpProStarterContributor>>(); |
|||
try |
|||
{ |
|||
using (cancellationTokenProvider.Use(cancellationToken)) |
|||
{ |
|||
if (cancellationTokenProvider.Token.IsCancellationRequested) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
foreach (var contributor in contributors) |
|||
{ |
|||
await contributor.RunAsync(); |
|||
} |
|||
} |
|||
} |
|||
catch |
|||
{ |
|||
// ignore
|
|||
} |
|||
}); |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
namespace Lion.AbpPro.Starter; |
|||
|
|||
public interface IAbpProStarterContributor |
|||
{ |
|||
Task RunAsync(); |
|||
} |
|||
Loading…
Reference in new issue