using System.Collections;
|
using Autofac;
|
using CMS.Data.Stressing;
|
using CMS.DataPersistence;
|
using CMS.DataPersistence.Data;
|
using CMS.Extensions.Abp.Autofac.Extensions.DependencyInjection;
|
using CMS.Plugin.MesSuite.Abstractions;
|
using CMS.Plugin.MesSuite.Abstractions.Consts;
|
using CMS.Plugin.PipeLineLems.Abstractions;
|
using CMS.Plugin.PipeLineLems.Apis;
|
using CMS.Plugin.PipeLineLems.Domain;
|
using CMS.Plugin.PipeLineLems.ProjectService;
|
using CMS.Plugin.PipeLineLems.Workers;
|
using CMS.Plugin.PipeLineLems.Apis;
|
using CMS.Project.Abstractions;
|
using Microsoft.AspNetCore.Builder;
|
using Microsoft.Extensions.DependencyInjection;
|
using Structing.AspNetCore;
|
using Structing.Core;
|
using Structing.Web;
|
using SYC.Plugin;
|
using Volo.Abp.BackgroundWorkers;
|
using Volo.Abp.DependencyInjection;
|
using Volo.Abp.Modularity.PlugIns;
|
|
namespace CMS.Plugin.PipeLineLems;
|
|
/// <summary>
|
/// CMS插件入口,使用<see cref="EnableApplicationPartAttribute"/>将导入Controller.
|
/// </summary>
|
[EnableApplicationPart]
|
public class CMSPluginEntry : PluginEntry
|
{
|
private readonly IServiceCollection _service = new ServiceCollection();
|
|
/// <inheritdoc />
|
public override void Register(IRegisteContext context)
|
{
|
var configuration = context.Features.GetConfiguration();
|
|
// 配置外部HttpApi: https://webapiclient.github.io/
|
context.Services
|
.AddHttpApi<IPipeLineLemsExternalApi>()
|
.ConfigureHttpApi(configuration.GetSection(nameof(IPipeLineLemsExternalApi)));
|
|
context.Services.TryAddPipeLineLems();
|
|
context.Services.AddScoped<IProjectRuntimeMigrator, CMSPluginRuntimeMigrator>();
|
context.Services.AddSingleton<IProjectService, PipeLineLemsProjectService>();
|
|
context.Services.AddScoped<IEFDataProvider>(p =>
|
{
|
var cfg = p.GetRequiredService<IDataRuntimeConfig>();
|
return new DefaultEFDataProvider(CMSPluginMesSuiteOptions.DataProviderName, CMSPluginMesSuiteOptions.GetDatabaseSuffix(CMSPluginDbProperties.MigrationsHistoryTable), CMSPluginDbProperties.MigrationsHistoryTable, cfg);
|
});
|
|
_service.AddObjectAccessor<IApplicationBuilder>();
|
_service.AddApplication<CMSPluginModule>(options =>
|
{
|
var databaseType = configuration[SectionName.DatabaseType] ?? "mysql";
|
if (KnowsDbCode.IsMysql(databaseType))
|
{
|
options.PlugInSources.Add(new TypePlugInSource(
|
typeof(MySQL.CMSPluginMySQLModule)
|
));
|
}
|
else if (KnowsDbCode.IsSqlServer(databaseType))
|
{
|
options.PlugInSources.Add(new TypePlugInSource(
|
typeof(SqlServer.CMSPluginSqlServerModule)
|
));
|
}
|
else if (KnowsDbCode.IsPostgreSql(databaseType))
|
{
|
options.PlugInSources.Add(new TypePlugInSource(
|
typeof(PostgreSql.CMSPluginPostgreSqlModule)
|
));
|
}
|
});
|
|
base.Register(context);
|
}
|
|
/// <inheritdoc />
|
public override void ConfigureContainer(ContainerBuilder builder)
|
{
|
builder.Populate(_service);
|
|
base.ConfigureContainer(builder);
|
}
|
|
/// <inheritdoc />
|
public override async Task ReadyAsync(IReadyContext context)
|
{
|
context.Provider.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = context.Features.GetApplicationBuilder();
|
var app = context.Features.GetApplicationBuilder();
|
await app.InitializeApplicationAsync();
|
|
await base.ReadyAsync(context);
|
}
|
|
/// <inheritdoc />
|
public override async Task AfterReadyAsync(IReadyContext context)
|
{
|
await context.GetRequiredService<IBackgroundWorkerManager>().AddAsync(context.GetRequiredService<PipeLineLemsWorker>());
|
|
await base.AfterReadyAsync(context);
|
}
|
}
|